zoukankan      html  css  js  c++  java
  • Logistic 回归(sigmoid函数,手机的评价,梯度上升,批处理梯度,随机梯度,从疝气病症预测病马的死亡率

    (手机的颜色,大小,用户体验来加权统计总体的值)极大似然估计MLE

    1.Logistic回归

    Logistic regression (逻辑回归),是一种分类方法,用于二分类问题(即输出只有两种)。如用于广告预测,也就是根据某广告被用户点击的可能性,把最可能被用户点击的广告摆在用户能看到的地方,结果是用户要么点击要么不点击。

    通常两类使用类别标号0和1表示,0表示不发生,1表示发生。

    问题引入

    例如:有100个手机,其中有30个是你喜欢的,70个是不喜欢的。现预测你对第101个手机的喜好。这是一个两类问题,喜欢与不喜欢。

    显然这是一个二分类问题,我们对第101个手机进行预测分类,分为喜欢和不喜欢两个类别。

    我们需要对手机取特征(属性),比如价格,外观,用户体验。简单处理,只考虑3个方面(即3个特征)。综合考虑这些因素,并且把这些值进行数字化的表示。数字越大说明越喜欢,越小越不喜欢。

    怎么数字化表示这些量呢?

    对每部手机对应价格,外观,用户体验都可以给出一个具体的数值。

    image

    image

    我们回忆一下贝叶斯分类:

    image

    2. Sigmoid 函数

    image  image

    image

    image

    image

    3.Sigmoid函数性质

    image

    image

    image

    image

    分类性质

    回顾我们的后验概率如何分类的,每个可以观测的样本都有属于某类的概率。分类时候选取后验概率大的值进行分类。这里是两分类问题每个样本均可带入P(y=1|x)和P(y=0|x)谁的概率值大,我们就将样本归入某类。

    现在分类模型为下边公式,但含有未知量 ,只要求出 就可以对样本,就可以带入样本就行计算,对样本进行分类。

    如何求未知参数 ?我们有m个样本,思路是建立一个目标函数,求目标函数极值。极值处的 值,就是我们最优未知参数值。

    image

    参数估计

    假设分类的概率

    image

    上面的概率可以写到一起 (类似二项分布)

    image

    m个样本的似然函数为

    image

    对数似然函数

    image

    使得似然函数值最大?梯度下降(上升)法。

    image

    似然函数求导

    image

    常规方法时效。故用梯度下降法

    Logistic回归中是未知参数 ,目标是求出 。通过构建似然函数,目标使似然函数最大。

    回顾我们梯度下降法。

    image  (J是上边的L函数,手误)问题解决

    4.梯度上升法

    目标使似然函数最大,我们可以使用梯度上升法进行迭代。

    image

    image

    image

    梯度下降法根据样本使用的不同,一次使用所有样本更新参数为批处理梯度下降法。一次只随机使用一个样本来更新参数随机梯度下降法。

    同样我们的Logistic回归可以使用批处理梯度上升法和随机梯度上升法。梯度上升法和梯度下降法都是寻找函数的极值,只是搜索方向的不同而已。根据具体函数的性质,进行选择,两者没有本质的不同。

    我们容易通过把函数转换成,把极大化问题转换成极小化问题。函数加负号即可。

    5.批处理梯度下降法

    image

    6.随机梯度下降法

    image

    7.代码实现

     

    准备数据,样例数据如下,前两列分别为x1和x2值,第3列为数据的类别,这样的数据有100条。

    image

    image

    批处理梯度下降(上升)算法计算最佳回归系数

    image

    image

    image

    image

    矩阵为什么要转置?

    image

    image

    image

    image

    image

    运行测试

    if __name__ == "__main__":

    dataMat,classLabels=loadDataSet()

    weights=gradAscent(dataMat, classLabels)

    plotBestFit(weights.getA())

    image

    8.随机梯度下降(上升)法SGD (stochastic gradient descent)

    image

    image

    运行测试

    if __name__ == "__main__":

    dataAttr, labelMat = loadDataSet()

    weights = stocGradAscent0(array(dataAttr), labelMat)

    plotBestFit(weights)

    image

    9.改进的随机梯度下降

    image

    image

    image

    image

    image

     

    运行测试

    if __name__ == "__main__":

    dataAttr, labelMat = loadDataSet()

    weights = stocGradAscent1(array(dataAttr), labelMat)

    plotBestFit(weights)

    image

    运行结果对比

    比较原始的随机梯度下降和改进后的梯度下降,可以看到两点不同:

    1)系数不再出现周期性波动。

    2)系数可以很快的稳定下来,也就是快速收敛。这里只迭代了20次就收敛了。而上面的随机梯度下降需要迭代200次才能稳定。

    image

    image

    (a)梯度下降算法迭代500次。

    (b)随机梯度下降算法迭代200次。

    (c)改进的随机梯度下降算法迭代20次。

    (d)改进的随机梯度下降算法迭代200次。

    10.示例:从疝气病症预测病马是否存活

    一、处理数据中的缺失值

    image

    二、用Logistic回归进行分类

    image

    image

    image

    image

    运行测试

    if __name__ == "__main__":

    multiTest()

    image

    11.总结

    image

  • 相关阅读:
    springboot常见应用属性
    springboot日志
    springboot注解
    2018年5月26日笔记
    LAMP环境搭建与配置
    2018年5月24日笔记
    2018年5月22日笔记
    2018年5月19日笔记
    2018年5月17日笔记
    2018年5月15日笔记
  • 原文地址:https://www.cnblogs.com/chaoren399/p/4850427.html
Copyright © 2011-2022 走看看