逻辑回归
分割线
逻辑回归
已知:给定数据,包含数据的特征和label
问题:二分类,根据数据的特征,对数据二分类。
例子:给定一个肿瘤的特征,如大小形状等等,判断是否是恶性肿瘤。
基础:线性回归,输入一个肿瘤各种特征,经过线性变换得到一个预测值y,若y>0.5为恶性,y<0.5为良性。
大概原理:
逻辑回归是在线性回归的基础上,增加了一个sigmoid函数。 为什么要增加这么一个函数呢?一个原因是线性回归的鲁棒性很差,就是因为线性回归需要作用于整个实数域,或者说,对整个实数域敏感,而分类的话,只需要在0,1之间分类就好了。sigmiod函数就能把预测区间减少到零到一。同时这个函数是单调可微的。
有了Sigmoid fuction之后,由于其取值在[0,1],我们就可以将sigmoid的结果 ϕ(x)当作类别1的后验概率估计p(y=1|x),也就是该点属于类别1的概率。
如果这个结果>0.5那么归为类别1,反之归为类别0.
那我们现在逻辑回归模型预测的流程就变成了:输入数据及特征 -> 经过线性变换和sigmoid函数输出一个预测值 -> 根据预测值的大小分类。
loss function选取:
模型参数:ω和b,也就是权重和偏差。
一般机器学习和深度学习的训练就是降低损失函数。
逻辑回归特殊之处是用最大似然的方法来做,个人感觉和降低损失函数差不多。
为什么不用mse,理论上来说mse也可以作为loss function,但是其图像可能有较多局部最小值,不平滑。所以mse对于之后的sgd步骤不太友好。
那么极大似然函数如何推导:
ϕ(z)可以视为类别1的后验估计,即:
那么关于类别0,自然有:(因为是二分类)
把上面两个公式合起来写:
y=1时转换为第一个式子,y=0时转换为第二个式子。
我们现在已知很多样本,我们需要找到参数,使用最大似然函数来估计参数:
取对数:
再取反:
这就是loss function了,因为最大似然函数估计参数是要最大化,所以我们取反后就是最小化,可以用gradient descent了。
当然这是对所有的数据(样本),只取一个看:
sgd训练:
sigmoid function有一个很好的性质就是
sgd更新梯度如下:
当然上面严格说来是gd不是sgd,sgd只需要更新几个而不是全部.
改进的随机梯度下降
1)在每次迭代时,调整更新步长alpha的值。随着迭代的进行,alpha越来越小,这会缓解系数的高频波动(也就是每次迭代系数改变得太大,跳的跨度太大)。当然了,为了避免alpha随着迭代不断减小到接近于0(这时候,系数几乎没有调整,那么迭代也没有意义了),我们约束alpha一定大于一个稍微大点的常数项,具体见代码。
2)每次迭代,改变样本的优化顺序。也就是随机选择样本来更新回归系数。这样做可以减少周期性的波动,因为样本顺序的改变,使得每次迭代不再形成周期性。
改进的随机梯度下降算法的伪代码如下:
################################################
初始化回归系数为1
重复下面步骤直到收敛{
对随机遍历的数据集中的每个样本
随着迭代的逐渐进行,减小alpha的值
计算该样本的梯度
使用alpha x gradient来更新回归系数
}
返回回归系数值
#################################################
几个问题:
交叉熵代价函数cross entropy通常用做多分类问题的loss function,其形式和上面的似然函数取对数很想,但其实是有信息论中信息熵的概论推导过来的。
sigmoid和softmax是神经网络输出层使用的**函数,分别用于两类判别和多类判别。
binary cross-entropy和categorical cross-entropy是相对应的损失函数。