回归算法——Logistics回归、Log对数损失(交叉熵损失)

回归算法——Logistics回归、Log对数损失、交叉熵损失

1.定义

Logistic算法是一个二分类算法,它通过Sigmoid函数,把函数值映射到0~1之间。其概率估计函数公式如下:
p ^ i = h θ ( X i ) = σ ( θ T X i ) \hat p_i=h_\theta(X_i)=\sigma(\theta^TX_i) p^i=hθ(Xi)=σ(θTXi)
其中 p ^ i \hat p_i p^i为样本 X i X_i Xi的最终估计概率, θ \theta θ为回归模型的特征参数向量, X i X_i Xi为某一样本,其中 σ ( ) \sigma() σ()为Sigmoid函数。
σ ( t ) = 1 1 + e − t \sigma(t) = \frac{1}{1+e^{-t}} σ(t)=1+et1
于是便有如下逻辑回归分类模型:
Y i ^ = { 0 , p i ^ < 0.5 1 , p i ^ ≥ 0.5 \hat{Y_i} = \begin{cases} 0,\hat{p_i}<0.5\\ 1,\hat{p_i}\ge0.5 \end{cases} Yi^={0,pi^<0.51,pi^0.5
即当样本 X i X_i Xi的预测概率小于0.5时,其预测分类为0;反之,其预测分类为1。我们也可以通过sigmoid函数知道,当 θ T X i < 0 \theta^TX_i<0 θTXi<0时,其预测分类为0; θ T X i ≥ 0 \theta^TX_i\ge0 θTXi0时其预测分类为1。

好了,既然我们知道Logistic模型是如何进行预测分类的了,那么接下来就讨论一下,我们要如何使模型更能准确的预测出样本分类,即我们如何调整模型的 θ \theta θ特征参数向量。于是我们就要引入损失函数的概念,即使用何种函数来定义本模型的好坏,并使用何种优化方式来使损失函数尽可能最小。

2.Log对数损失

Log对数损失, 即对数似然损失(Log-likelihood Loss), 也称逻辑斯谛回归损失(Logistic Loss)或交叉熵损失(cross-entropy Loss),它是采取极大似然估计思想来进行设计的。下面就讲一下极大似然估计思想:

假设样本X服从某一分布(比如0-1分布),现在要做的是就是根据样本X估计该分布参数 θ \theta θ的值,直观上来讲,由于已知样本X,那么这个样本X的产生一定与未知的 θ \theta θ有关,既然已有样本X了,则认为 θ \theta θ的值应该是使 p ( X / θ ) p(X/\theta) p(X/θ)最大的那个值,于是有似然估计函数 L ( X , θ ) L(X,\theta) L(X,θ)最大化。

那么据此思想,已经构建了Logistics算法模型,即样本X满足Logistics概率函数分布,于是构建如下似然函数 L ( Y , θ ) L(Y,\theta) L(Y,θ),即样本X在分类为Y的情况下,求得 θ \theta θ使样本X通过Logistics概率函数分类为Y的概率最大。
即有如下正确分类预测概率函数的定义:
p ( y ^ i = Y i / X i ) = { σ ( θ T X i ) , Y i = 1 ( 即 X i 的 分 类 标 签 为 1 时 ) 1 − σ ( θ T X i ) , Y i = 0 ( 即 X i 的 分 类 标 签 为 0 时 ) p(\hat y_i=Y_i/X_i) = \begin{cases} \sigma(\theta^TX_i) ,Y_i=1(即X_i的分类标签为1时)\\ 1-\sigma(\theta^TX_i),Y_i=0(即X_i的分类标签为0时) \end{cases} p(y^i=Yi/Xi)={σ(θTXi),Yi=1(Xi1)1σ(θTXi),Yi=0(Xi0)
理解如下:如果 p ^ \hat p p^值在0.5附近,其代表的意思是既有点像类别0也有点像类别1,这表明分类并不准确,所以有,对于分类标签为1的样本,其正确分类概率最大即为 p ^ \hat p p^最大,即 σ ( t ) \sigma(t) σ(t)函数的值最大,对于分类标签为0的样本,其正确分类概率最大即为 p ^ \hat p p^最小,即 σ ( t ) \sigma(t) σ(t)函数的值最小。

进而,为了统一样本的表达式,因为样本存在0,1两类,要用一个统一的概率形式表示。故有如下公式:
p ( y ^ i = Y i / X i ) = ( σ ( θ T X i ) ) Y i ∗ ( 1 − σ ( θ T X i ) ) 1 − Y i p(\hat y_i=Y_i/X_i) = (\sigma(\theta^TX_i))^{Y_i}*(1-\sigma(\theta^TX_i))^{1-Y_i} p(y^i=Yi/Xi)=(σ(θTXi))Yi(1σ(θTXi))1Yi
由于分类问题是离散型数组,于是有如下最大似然估计函数:
L ( θ ) = ∏ i = 1 m p ( y ^ i = Y i / X i ) = ∏ i = 1 m ( σ ( θ T X i ) ) Y i ∗ ( 1 − σ ( θ T X i ) ) 1 − Y i L(\theta)=\prod_{i=1}^m p(\hat y_i=Y_i/X_i) =\prod_{i=1}^m (\sigma(\theta^TX_i))^{Y_i}*(1-\sigma(\theta^TX_i))^{1-Y_i} L(θ)=i=1mp(y^i=Yi/Xi)=i=1m(σ(θTXi))Yi(1σ(θTXi))1Yi
故接下来就是计算 L ( θ ) L(\theta) L(θ)的最大值即可,其最大值所对应的 θ \theta θ值即为最佳模型参数向量。为了方便计算,在求最大似然估计的时候,通常对该函数取对数:
log ⁡ L ( θ ) = ∑ i = 1 m Y i ∗ log ⁡ σ ( θ T X i ) + ( 1 − Y i ) log ⁡ ( 1 − σ ( θ T X i ) ) \log{L(\theta)}=\sum_{i=1}^m Y_i*\log{\sigma(\theta^TX_i)+(1-Y_i)\log({1-\sigma(\theta^TX_i)})} logL(θ)=i=1mYilogσ(θTXi)+(1Yi)log(1σ(θTXi))
又由于为了统一损失函数的概念(损失函数值最小的时候即为最佳方案),整个训练集的损失函数只是所有训练实例的平均值,于是最终的Log对数损失函数如下:
L o g L o s s ( X ) = − 1 m ∗ ∑ i = 1 m Y i ∗ log ⁡ σ ( θ T X i ) + ( 1 − Y i ) log ⁡ ( 1 − σ ( θ T X i ) ) LogLoss(X) = -\frac{1}{m}*\sum_{i=1}^m Y_i*\log{\sigma(\theta^TX_i)+(1-Y_i)\log({1-\sigma(\theta^TX_i)})} LogLoss(X)=m1i=1mYilogσ(θTXi)+(1Yi)log(1σ(θTXi))
从另一个角度考虑:

这个损失函数是合理的,因为当 p ^ \hat p p^接近 0 时,- log ⁡ p ^ \log\hat p logp^变得非常大,所以如果模型估计一个正例概率接近于 0,那么损失函数将会很大,同时如果模型估计一个负例的概率接近 1,那么损失函数同样会很大。 另一方面,当 p ^ \hat p p^接近于 1 时, - log ⁡ p ^ \log\hat p logp^接近 0,所以如果模型估计一个正例概率接近于 0,那么损失函数接近于 0,同时如果模型估计一个负例的概率接近 0,那么损失函数同样会接近于 0, 这正是我们想的,这实际上就起到了一个对错误分类惩罚的作用。

3.那么为什么它又叫交叉熵损失函数呢,那么我们引出交叉熵的概念:

交叉熵刻画的是实际输出(概率)与期望输出(概率)的距离,也就是交叉熵的值越小,两个概率分布就越接近。假设概率分布p为期望输出,概率分布q为实际输出,H(p,q)为交叉熵,则:
H ( p , q ) = − ∑ x p ( x ) log ⁡ q ( x ) H(p,q) =- \sum_xp(x)\log q(x) H(p,q)=xp(x)logq(x)
在机器学习任务中,其中 p ( x ) p(x) p(x)对应样本Label y k y_k yk),但要转化为数值1,因为在分类问题中,存在多种Label,比如二分类问题中的0—1,若直接使用Label作为p(x),那么label数值会对loss函数的值产生影响,比如label=0时无论q(x)为多少,其值皆为0,故要进行标签数值转化,消除标签数值带来的影响。

q ( x ) q(x) q(x)对应模型的正确分类预测概率 y ^ k \hat y_k y^k),其中 q ( x ) ∈ [ 0 , 1 ] q(x)\in[0,1] q(x)[0,1],我们可以发现当 q ( x ) q(x) q(x)上升时对应的 − log ⁡ q ( x ) -\log q(x) logq(x)下降,即交叉熵下降。而根据交叉熵的思想,当q(x)越接近p(x)时,代表交叉熵越小,比如q(x)=1时,代表100%确定正确分类,即交叉熵为0,即此时q(x)=p(x),而p(x)是一个真实定值,即有p(x)=1。

上面是针对单类样本的交叉熵定义,在上面交叉熵的基础上,我们可以根据交叉熵的思想,给出多分类样本中的交叉熵定义:
J ( θ ) = − 1 m ∑ i = 1 m ∑ k = 1 n y k i log ⁡ ( y ^ k i ) J(\theta) = -\frac{1}{m}\sum_{i=1}^m\sum_{k=1}^n y_k^i\log(\hat y_k^i) J(θ)=m1i=1mk=1nykilog(y^ki)
其中 y k i y_k^i yki的含义即:
y k i = { 1 , L a b e l ( X i ) = k ( 即 X i 的 分 类 标 签 为 k 时 ) 0 , e l s e ( 因 为 交 叉 熵 只 表 示 预 测 分 类 同 真 实 分 类 的 差 异 程 度 , 并 不 测 量 同 错 误 分 类 的 差 异 程 度 , 所 以 设 置 为 0 ) y_k^i= \begin{cases} 1,Label(X_i)=k(即X_i的分类标签为k时)\\ 0,else(因为交叉熵只表示预测分类同真实分类的差异程度,并不测量同错误分类的差异程度,所以设置为0) \end{cases} yki={1,Label(Xi)=k(Xik)0,else(0)

根据上面的情况,可看出log对数损失实际上是类别数为2时的多类别交叉熵损失函数, L o g L o s s ( X ) = − 1 m ∗ ∑ i = 1 m y i ∗ log ⁡ p ^ + ( 1 − y i ) log ⁡ ( 1 − p ^ ) LogLoss(X) = -\frac{1}{m}*\sum_{i=1}^m y_i*\log{\hat p+(1-y_i)\log({1-\hat p})} LogLoss(X)=m1i=1myilogp^+(1yi)log(1p^)
其中Label=1的直接使用其标签 y i y_i yi作为p(x),使用sigmoid函数 σ ( X ) \sigma(X) σ(X)作为正确分类预测概率 y ^ i \hat y_i y^i;Label=0的要转化到1,故使用 1 − y i 1-y_i 1yi作为p(x),使用 1 − σ ( X ) 1-\sigma(X) 1σ(X)作为 y ^ i \hat y_i y^i

你可能感兴趣的:(算法,深度学习)