Logistic 回归(sigmoid函数,手机的评价,梯度上升,批处理梯度,随机梯度,从疝气病症预测病马的死亡率
(手机的颜色,大小,用户体验来加权统计总体的值)极大似然估计MLE
1.Logistic回归
Logistic regression (逻辑回归),是一种分类方法,用于二分类问题(即输出只有两种)。如用于广告预测,也就是根据某广告被用户点击的可能性,把最可能被用户点击的广告摆在用户能看到的地方,结果是用户要么点击要么不点击。
通常两类使用类别标号0和1表示,0表示不发生,1表示发生。
问题引入
例如:有100个手机,其中有30个是你喜欢的,70个是不喜欢的。现预测你对第101个手机的喜好。这是一个两类问题,喜欢与不喜欢。
显然这是一个二分类问题,我们对第101个手机进行预测分类,分为喜欢和不喜欢两个类别。
我们需要对手机取特征(属性),比如价格,外观,用户体验。简单处理,只考虑3个方面(即3个特征)。综合考虑这些因素,并且把这些值进行数字化的表示。数字越大说明越喜欢,越小越不喜欢。
怎么数字化表示这些量呢?
对每部手机对应价格,外观,用户体验都可以给出一个具体的数值。
我们回忆一下贝叶斯分类:
2. Sigmoid 函数
3.Sigmoid函数性质
分类性质
回顾我们的后验概率如何分类的,每个可以观测的样本都有属于某类的概率。分类时候选取后验概率大的值进行分类。这里是两分类问题每个样本均可带入P(y=1|x)和P(y=0|x)谁的概率值大,我们就将样本归入某类。
现在分类模型为下边公式,但含有未知量 ,只要求出 就可以对样本,就可以带入样本就行计算,对样本进行分类。
如何求未知参数 ?我们有m个样本,思路是建立一个目标函数,求目标函数极值。极值处的 值,就是我们最优未知参数值。
参数估计
假设分类的概率
上面的概率可以写到一起 (类似二项分布)
m个样本的似然函数为
对数似然函数
使得似然函数值最大?梯度下降(上升)法。
似然函数求导
常规方法时效。故用梯度下降法
Logistic回归中是未知参数 ,目标是求出 。通过构建似然函数,目标使似然函数最大。
回顾我们梯度下降法。
4.梯度上升法
目标使似然函数最大,我们可以使用梯度上升法进行迭代。
梯度下降法根据样本使用的不同,一次使用所有样本更新参数为批处理梯度下降法。一次只随机使用一个样本来更新参数随机梯度下降法。
同样我们的Logistic回归可以使用批处理梯度上升法和随机梯度上升法。梯度上升法和梯度下降法都是寻找函数的极值,只是搜索方向的不同而已。根据具体函数的性质,进行选择,两者没有本质的不同。
我们容易通过把函数转换成,把极大化问题转换成极小化问题。函数加负号即可。
5.批处理梯度下降法
6.随机梯度下降法
7.代码实现
准备数据,样例数据如下,前两列分别为x1和x2值,第3列为数据的类别,这样的数据有100条。
批处理梯度下降(上升)算法计算最佳回归系数
矩阵为什么要转置?
运行测试
if __name__ == "__main__":
dataMat,classLabels=loadDataSet()
weights=gradAscent(dataMat, classLabels)
plotBestFit(weights.getA())
8.随机梯度下降(上升)法SGD (stochastic gradient descent)
运行测试
if __name__ == "__main__":
dataAttr, labelMat = loadDataSet()
weights = stocGradAscent0(array(dataAttr), labelMat)
plotBestFit(weights)
9.改进的随机梯度下降
运行测试
if __name__ == "__main__":
dataAttr, labelMat = loadDataSet()
weights = stocGradAscent1(array(dataAttr), labelMat)
plotBestFit(weights)
运行结果对比
比较原始的随机梯度下降和改进后的梯度下降,可以看到两点不同:
1)系数不再出现周期性波动。
2)系数可以很快的稳定下来,也就是快速收敛。这里只迭代了20次就收敛了。而上面的随机梯度下降需要迭代200次才能稳定。
(a)梯度下降算法迭代500次。
(b)随机梯度下降算法迭代200次。
(c)改进的随机梯度下降算法迭代20次。
(d)改进的随机梯度下降算法迭代200次。
10.示例:从疝气病症预测病马是否存活
一、处理数据中的缺失值
二、用Logistic回归进行分类
运行测试
if __name__ == "__main__":
multiTest()
11.总结