许多问题的预测结果是一个在连续空间的数值,比如房价预测问题,可以用线性模型来描述:
y=w1x1+w2x2+...+wnxn+by=w_1x_1+w_2x_2+...+w_nx_n+by=w1x1+w2x2+...+wnxn+b
但也有很多场景需要输出的是概率估算值,例如:根据邮件内容判断是垃圾邮件的可能性;根据医学影像判断肿瘤是恶性的可能性;手写数字分别是0、1、2、3、4、5、6、7、8、9的可能性。这些都是分类问题。
要预测各类别的概率值,需要将预测输出值控制在[0,1]区间内。对于二元分类问题,它的目标是正确预测两个可能的标签中的一个,就像判断是不是垃圾邮件,答案只有是或否两种。此时可考虑⽤逻辑回归(Logistic Regression)来处理这类问题。
逻辑回归也叫回归,但本质上它能更好的处理分类问题。
如何保证输出值始终落在0和1之间呢?
这里有⼀个⾮常好的函数叫Sigmoid函数(S型函数),它的输出值正好具有以上特性。其定义如下:
(1)g(z)=11+e−zg(z)=\frac 1 {1+e^{-z}}\tag{1}g(z)=1+e−z1(1)
通过sigmoid函数,可以把线性模型的输出映射到0到1之间的概率,从而实现⼆元分类的思想。
逻辑回归中的损失函数
在模型优化时需要计算损失函数,线性回归的损失函数是MSE均方差损失函数,即平方损失,如果把逻辑回归的损失函数也定义为平方损失,会得到如下函数:
J(w)=1n∑i=1n(g(zi)−yi)2J(w)=\frac 1 n\sum_{i=1}^n(g(z_i)-y_i)^2J(w)=n1i=1∑n(g(zi)−yi)2
这个损失函数是一个⾮凸的函数,是有多个极⼩值的。
⽤梯度下降优化算法就很有可能使优化过程陷⼊到局部最优的局部极⼩值中去, 使得函数不能达到全局最优。所以建议大家在逻辑回归中不要采⽤平⽅损失函数。
那这里应该采⽤什么样的损失函数呢?
对于二元逻辑回归的损失函数,一般采用对数损失函数,其定义如下:
J(w,b)=∑(−ylog(y^)−(1−y)log(1−y^))J(w,b)=\sum(-ylog(\hat y)-(1-y)log(1-\hat y))J(w,b)=∑(−ylog(y^)−(1−y)log(1−y^))
其中y^\hat yy^是预测值
为什么要采用这样的函数呢?
假设样本(x,y)(x,y)(x,y)中的标签值y=1y=1y=1,那么理想的预测结果y^=1\hat y=1y^=1。yyy与y^\hat yy^越接近,损失就越⼩。如果y^=1\hat y=1y^=1,上图公式的后半部分为0,整个损失函数就变成了−log(y^)-log(\hat y)−log(y^)。根据对数函数的性质,当y^\hat yy^越接近1,−log(y^)-log(\hat y)−log(y^)的值越⼩的。反之,如果标签值y=0y=0y=0,上图公式的前半部分为0,整个损失函数就变成了−log(1−y^)-log(1-\hat y)−log(1−y^),当y^\hat yy^越⼩时,损失值越⼩。
通过这样的对数损失函数,就能较好的刻画预测值和标签值之间的损失关系,⽽且这个损失函数是凸函数:
多元分类和softmax回归
之前已经提到逻辑回归可生成介于0和1之间的小数。例如,某电子邮件分类器的逻辑回归输出值为0.8,表明电子邮件是垃圾邮件的概率为80%,不是垃圾邮件的概率为20%。很明显,这封电子邮件是垃圾邮件与不是垃圾邮件的概率之和为1。
在处理多元分类中,Softmax将逻辑回归的思想延伸到多类别领域。
在多类别问题中,Softmax为每个类别分配一个小数形式的概率,介于0到1之间,并且这些概率的和必须是1。
Softmax 层实际上是通过Softmax方程来实现,把y的值经过运算,映射到多分类问题中属于每个类别的概率值:
其计算公式如下:
pi=e(yi)∑k=1ceykp_i=\frac{e^{(y_i)}}{\sum_{k=1}^ce^{y_k}}pi=∑k=1ceyke(