通过一条线将平面上所有点连接起来,这个拟合的过程称为回归。
Logistic回归分类的思想是:根据现有数据对分类边界线建立回归公式,并进行分类。
其过程和其它算法一样,分为:
1)收集数据
2)准备数据:本方法需要数值型数据
3)分析数据
4)训练算法
5)测试算法
6)使用算法
我们定义一个函数sigmoid:
其图像为:
这个函数具有这样的性质:
1)值域在0-1间
2)曲线平滑且对称
3)对一定范围外的值的变化不敏感,对这个范围内的值的变化很敏感
因此,我们可以将它作为很好的二分类函数。
假设我们的数据有n个特征:x1,x2…xn,将它视作一个列向量,我们设一个和它形状相同的w向量。令z=wt * x为sigmoid函数的输入值,输出值作为该数据的分类结果:>0.5为1,否则为0.
那么我们该如何构建这个w向量呢?
第一个方法是使用梯度上升算法。
该算法的思想是为了找到函数的最大值,我们需要沿着函数的梯度增加的方向。如果设函数为f,梯度记为D,a为步长,那么梯度上升法的迭代公式为:w:w+a*Dwf(w)。该公式停止的条件是迭代次数达到某个指定值或者算法达到某个允许的误差范围。
其伪代码为:
每个回归系数初始化为1
重复R次:
  计算整个数据集的梯度
使用步长 * 梯度更新回归系数的向量
返回回归系数
然而这一算法的问题是
1)它在构建分类器时,需要对整个数据集进行计算,这对一些庞大的数据集来说,是很低效的。
2)它依靠于数据集,所以对数据集以外的数据的分类效果很差。
为了解决这两个问题,我们对其改进,引入了随机梯度上升算法,它每次只使用一个样本点来更新回归系数,因此也被称为随机梯度上升。其伪代码为:
所有回归系数初始化1
对数据集中每个样本:
计算该样本梯度
使用步长 * 梯度更新回归系数的向量
返回回归系数
这个算法能够很好地解决梯度上升算法的问题,然而它的问题是收敛速度不够快,且因为存在一些不能正确分类的样本点,从而引起系数的剧烈波动。为了解决这个问题,我们改进了随机梯度上升算法,改进的地方有两点:
1)步长从一个定值变为一个变值:alpha = 4/(1.0+i+j)+0.01。当迭代进行到后期时,步长非常小,不能分类的样本点对回归线的影响将下降,减少了波动。
2)随机选取样本来更新回归系数,这减少了周期性的波动(增加了随机性)。