原文:http://blog.csdn.net/xmu_jupiter/article/details/46755679
首先声明:本博客的写作思路是对机器学习的一些基本算法做一些通俗性的灵活理解,以及对一些细节的进行简单剖析,还有记录本人在使用算法时的一些小经验小感想。本人一般不会对基本公式做大量推导,也不会写的太正式,这些可以在很多其他博客中找到。由于本人还是学生一枚,经验知识粗浅,还望能和朋友们参与讨论。
之前本博客简单谈过线性回归相关知识点,这次来谈一下逻辑斯蒂回归。虽然也叫回归,但是逻辑斯蒂回归是一种分类算法。它合理地应用了线性回归的优势来完成分类任务,是一种应用非常广泛的分类算法。
那么,逻辑斯蒂回归是如何完成分类任务的呢?
第一个理解角度:线性回归用于分类任务的拓展
我们知道,线性回归之所以功能强大,离不开它能将输入数据的各个维度的特征进行了有效的结合(通过分配不同的权重),使得所有特征共同协同合作作出最后的决策。但是,作出的决策是对模型的一个拟合结果,不能直接用于分类。于是,逻辑斯蒂回归使用了一个sigmod函数,将特征的线性加权结果映射到0到1之间,而这刚好可以看做是数据样本点属于某一类的概率。如果结果越接近0或者1,说明分类结果的可信度越高。
这里需要注意的一点是,逻辑斯蒂回归不仅可以处理数据线性可分的情况,还可以处理数据线性不可分的情况。当线性加权的各个特征不是简单的线性函数而是非线性函数的时候,分割面就不是一个超平面而是一个曲线或者曲面。这种情况一图以明之:
还有一个理解角度是:基于逻辑斯蒂分布的二项逻辑斯蒂回归模型
这个角度的好处是可以将逻辑斯蒂回归模型的二分类问题轻松扩展到多分类问题。二项逻辑斯蒂回归模型是一种分类模型,由条件概率分布P(Y|X)表示,形式为参数化的逻辑斯蒂分布(关于逻辑斯蒂分布以及概率分布的基础知识请看本文附录)。这里,随机变量X取值为实数,随机变量Y取值为1或0。二项逻辑斯蒂回归模型是如下的条件概率分布:
对于给定的输入实例x,按照上式可以求得P(Y=1|x)和P(Y=0|x)。逻辑斯蒂回归比较两个条件概率值的大小,将实例x分到概率值较大的那一类。
现在我们要引入一个叫做“事件的几率”这个概念。一个事件的几率是指该事件发生的概率与该事件不发生的概率的比值。如果事件发生的概率是p,那么该事件的几率是p/(1-p),该事件的对数几率或logit函数是:logit(p)=log( p/(1-p) ) 。对逻辑斯蒂回归而言,由上面表达式得:
这就是说,在逻辑斯蒂回归模型中,输出Y=1的对数几率是输入x的线性函数。或者说,输出Y=1的对数几率是由输入x的线性函数表示的模型,即逻辑斯蒂回归模型。
多项逻辑斯蒂回归
上面说到第二种角度可以轻松扩展到多分类,叫做多项逻辑斯蒂回归模型,我们现在来看一下。假设离散型随机变量Y的取值集合是{1,2,…K},那么多项逻辑斯蒂回归模型是:
对于参数估计方法仍然可以采用二分类时候的最大似然估计,后面再讲。
逻辑斯蒂回归适合应用在什么场景?
在我们的工业应用上,如果需要作出分类的数据拥有很多有意义的特征,每个特征(我们假设这些特征都是有效的)都对最后的分类结果又或多或少的影响,那么最简单最有效的办法就是将这些特征线性加权,一起参与到作出决策的过程中。比如预测广告的点击率,又比如从原始数据集中筛选出符合某种要求的有用的子数据集。
逻辑斯蒂回归还有一个优点,那就是它不是硬性地将分类结果定为0或者1,而是给出了0和1之间的概率。这就相当于对每条数据的分类结果给出了一个打分。打分越高的数据越是我们想要的。如果我们要从一个数据集中筛选出一批数据(比如100个),就只要选出打分排名前100的数据就可以了。我们也可以根据实际情况设定一个阀值,大于这个阀值的归为一类,小于这个阀值的归为另一类。
如何提高逻辑斯蒂回归的分类准确性?
个人感觉,只要特征找的准,数据量足够大,逻辑斯蒂回归将会非常好用。另外,还要注意避免过拟合。
特征选择的话,由于逻辑斯蒂回归的优点,开始的时候不用考虑各个特征之间是否有相关性,直接把能用的特征全部线性加权起来就好。经过初步训练,观察各个特征的权值,如果权值接近为0,那么就可以将这个特征看做是不相关的可以去除的特征。总结起来就是:先做加法再做减法。
解决过拟合的方法不过两种,一种是减少特征的个数;另一种是模型选择的正则化方法。正则化的话,可以参考岭回归方法。
逻辑斯蒂回归的优缺点?
优点:计算代价不高,易于理解和实现,且若采用随机梯度上升法可以在线学习;
缺点:可能容易欠拟合,分类精度不高,这个可能是因为我们无法找到足够的特征。
逻辑斯蒂回归的模型训练?
采用最大似然估计。对于二分类问题,数据属于A类的概率为H(X),那么数据属于B类的概率就为1-H(X)。模型训练就是使得训练数据的似然函数最大,于是转化为一个最优化的问题。也可以将最大似然估计理解为损失函数为对数损失函数的经验风险最小化,证明在这里,所以逻辑斯蒂回归的损失函数是对数损失函数。
逻辑斯蒂回归模型归结为以似然函数为目标函数的最优化问题,通常通过迭代算法求解。从最优化的观点看,这时的目标函数具有很好的性质,它是光滑的凸函数,因此多种最优化的方法都适用,保证能找到全局最优解。在解这个最优化问题的时候,通常采用近似方法如梯度上升法和拟牛顿法。为什么不像线性回归那样直接求取解析解呢?因为这将导致计算非常复杂。其中梯度上升法可能导致计算量太大,于是用随机梯度上升法代替;牛顿法或拟牛顿法一般收敛速度更快。
随机梯度上升法需要注意两个点才能达到性能完全发挥出来。首先,控制步长的alpha最好不要设定为固定值,而是随着迭代的深入而不断变小,这样有利于减少在最优值附近的震荡。这可以将alpha设置为分母随着迭代次数不断变大的分数来实现,但注意不要让alpha最后变为零,这就需要alpha设置为分数和常数的和;其次,既然是随机梯度上升,那么每次取一个样本点的时候就要随机取,不要按照顺序取,这样才能保证合理性。最后要注意迭代次数的控制。
模型参数求解出来以后是特征权重组成的向量。其实,逻辑斯蒂回归模型可以看做由两部分组成。一部分跟线性回归一样,就是一条直线;另一部分就是sigmod函数。需要注意的是,有了权重向量我们就可以线性加权了,我们的直线就是令线性加权的结果为0的公式表达。为什么要人为定为0呢?当然是为了sigmod函数啊。这样才能使正样本的线性加权大于0,在sigmod中接近1,同样负样本的线性加权小于0,在sigmod中接近0。在SVM中,同样也是先学习一个分离超平面,然后带入分类决策函数sign中。
与其它的分类算法比较?
能和逻辑斯蒂回归进行比较的就是牛逼闪闪的线性SVM了。关于这部分请移步这里。大概意思是:直接用线性回归做分类因为考虑到了所有样本点到分类决策面的距离,所以在两类数据分布不均匀的时候将导致误差非常大;逻辑斯蒂回归回归和SVM克服了这个缺点,前者采用将所有数据采用sigmod函数进行了非线性映射,使得远离分类决策面的数据作用减弱;后者则直接去掉了远离分类决策面的数据,只考虑支持向量的影响。
逻辑斯蒂分布
设X是连续随机变量,X服从逻辑斯蒂分布是指X具有下列分布函数和密度函数:
逻辑斯蒂分布的密度函数f(x)和F(x)的图形如下图所示:
其中,分布函数在x处的取值其实就是将密度函数在x以及之前负无穷的所有取值进行积分。