机器学习实战(Machine Learning in Action)学习笔记————05.Logistic回归

关键字:Logistic回归、python、源码解析、测试
作者:米仓山下
时间:2018-10-26
机器学习实战(Machine Learning in Action,@author: Peter Harrington)
源码下载地址:https://www.manning.com/books/machine-learning-in-action
git@github.com:pbharrin/machinelearninginaction.git

*************************************************************
一、Logistic回归

Sigmoid函数输入为z,z=w0x0+w1x1+w2x2+…wnxn,又写成z=WTX
Sigmoid函数为σ(z)=1/(1+exp(-z))

#Logistic回归分类的原理:训练得到系数矩阵W,将位置特征向量带入Sigmoid,计算得到一个位于0~1之间的数,大于0.5则属于1类,小于0.5则属于0类。

梯度上升法:要找到某个函数的最大值,最好的方法就是沿着该函数梯度的方向探寻。如果梯度记为▽,则函数f(x,y)的梯度表示为:

梯度上升算法到达每个点后都会重新估计移动的方向。从P0开始,计算该点的梯度,函数就根据梯度移动到下一个点P1。在P1点,梯度再次被重新计算,并沿新的梯度方向移动到P2。如此迭代,直到满足停止条件。迭代的过程中,梯度算子总是保证我们能够取到最佳的移动方向。

梯度的方向就是导数最大值的方向,即函数变化率最快的方向。梯度可以通过对函数求导得到。向梯度相反方向移动保证每一次迭代都在减少下降局部全局最小值

用向量来表示的话,梯度算法的迭代公式为:w:=w+α▽wf(w)公式一直迭代下去,直到某个指定值或算法达到某个可以允许的误差范围。
这本书中用的是梯度上升,平时听到比较多的是梯度下降法,其实是一样的,只是移动的方向不同:梯度上升用来求解最大值,梯度下降用来求解最小值。接触过深度学习就知道,梯度下降在求解参数矩阵时非常重要。

主要看两个函数:

#Logistic函数σ(z)=1/(1+exp(-z))
def sigmoid(inX):return 1.0/(1+exp(-inX))#Logistic回归梯度上升优化算法
def gradAscent(dataMatIn, classLabels):dataMatrix = mat(dataMatIn)             #convert to NumPy matrixlabelMat = mat(classLabels).transpose() #convert to NumPy matrixm,n = shape(dataMatrix)alpha = 0.001                           #移动步长maxCycles = 500                         #迭代次数weights = ones((n,1))                   #初始化系数向量for k in range(maxCycles):              #heavy on matrix operationsh = sigmoid(dataMatrix*weights)     #matrix multerror = (labelMat - h)              #[注].vector subtractionweights = weights + alpha * dataMatrix.transpose()* error #[注].matrix multreturn weights

[注]书中省略了梯度的推导过程。构造的损失函数为P(y|x;θ)=(hθ(x))^y * (1-hθ(x))^(1-y),其中h即Logistic函数σ,取其似然函数和最大似然函数,求最大似然估计,然后求导就可以得到上面的结果。参考网址************或则书*******
--------------------------------------------------------------
测试:

>>> import logRegres
>>> data,lable=logRegres.loadDataSet()
>>> w=logRegres.gradAscent(data,lable)
>>> w
matrix([[ 4.12414349],[ 0.48007329],[-0.6168482 ]])
>>>
#画出决策边界
>>> logRegres.plotBestFit(w.getA())
>>> 


(图-画出决策边界)
--------------------------------------------------------------
方法优化1:随机梯度上升————每次迭代仅用一个样本点来更新回归系数。
对应logRegres.stocGradAscent0方法,迭代次数为数据的条数

方法优化2:改进的随机梯度上升————每次迭代时,调整alpha大小,alpha = 4/(1.0+j+i)+0.0001
alpha随着迭代次数增加不断减小,但又不等于零

--------------------------------------------------------------
#分类函数,在求得参数weights后将其和测试数据inX(向量)带入如下公式,就可以完成二类判别

def classifyVector(inX, weights):prob = sigmoid(sum(inX*weights))if prob > 0.5: return 1.0else: return 0.0

*************************************************************
二、示例:从疝气病症预测马的死亡率

处理数据中的缺失值的方法:
#使用可用特征的均值来填补缺失值;
#使用特殊值来填补缺失值,如-1;
#忽略有缺失值的样本;
使用相似样本均值补缺缺失值;
使用另外的机器学习算法预测缺失值

这个例子中用了0来补缺失值,数据包含28个特征和1列标签(分类两类),horseColicTraining.txt为训练数据,horseColicTest.txt为测试数据。
使用改进的随机梯度上升stocGradAscent1算法,对数据进行测试

>>> logRegres.colicTest()#colicTest()为循环训练1000次再进行测试的效果
logRegres.py:18: RuntimeWarning: overflow encountered in expreturn 1.0/(1+exp(-inX))
the error rate of this test is: 0.373134
0.373134328358209
>>>
>>> logRegres.multiTest()#colicTest()执行10次的平均错误率
the error rate of this test is: 0.343284
the error rate of this test is: 0.358209
the error rate of this test is: 0.343284
the error rate of this test is: 0.343284
the error rate of this test is: 0.268657
the error rate of this test is: 0.253731
the error rate of this test is: 0.343284
the error rate of this test is: 0.268657
the error rate of this test is: 0.447761
the error rate of this test is: 0.283582
after 10 iterations the average error rate is: 0.325373
>>>

其他代码:

sigmoidPlot.py  #s = 1/(1 + exp(-t))函数在[-5,5]和[-60,60]上的形态对比
plotSDerror.py  #stocGradAscent1算法,在迭代过程中,三个参数的变化趋势
plotGD.py       #梯度下降示意图
plot2D.py       #stocGradAscent0进行梯度下降,决策边界

转载于:https://www.cnblogs.com/Micang/p/9900842.html

机器学习实战(Machine Learning in Action)学习笔记————05.Logistic回归相关推荐

  1. 决策树(chap3)Machine Learning In Action学习笔记

    优点:计算复杂度不高,输出结果易于理解,对中间值的缺失不敏感,可以处理不相关特征数据. 缺点:可能会产生过度匹配问题. 适用数据类型:数值型(必须离散化)和标称型. 决策树创建分支的伪代码函数crea ...

  2. Machine Learning in Action 读书笔记---第8章 预测数值型数据:回归

    Machine Learning in Action 读书笔记 第8章 预测数值型数据:回归 文章目录 Machine Learning in Action 读书笔记 一.回归 1.回归的一般过程 2 ...

  3. Machine Learning in Action 读书笔记---第5章 Logistic回归

    Machine Learning in Action 读书笔记 第5章 Logistic回归 文章目录 Machine Learning in Action 读书笔记 一.Logistic回归 1.L ...

  4. Machine Learning in Action 读书笔记---第3章 决策树

    Machine Learning in Action 读书笔记 第3章 决策树 文章目录 Machine Learning in Action 读书笔记 一.决策树算法简介 1 决策树的构造 2 决策 ...

  5. Machine Learning in Action 读书笔记---第4章 基于概率论的分类方法:朴素贝叶斯

    Machine Learning in Action 读书笔记 第4章 基于概率论的分类方法:朴素贝叶斯 文章目录 Machine Learning in Action 读书笔记 一.基于贝叶斯决策理 ...

  6. 机器学习(Machine Learning)——深度学习(Deep Learning)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/abcjennifer/article/ ...

  7. 【theano-windows】学习笔记七——logistic回归

    前言 前面只是学了最基本的theano操作,但是theano中还有很多其他的东西,比如图结构,自定义函数等,这些暂时没有用到就先不看了,后续学啥用啥,没必要一口气吃个胖子,免得消化不良还把前面吃的东西 ...

  8. 原创 | 斯坦福Machine Learning with Graphs 学习笔记(第一讲)

    作者:林夕 本文长度为2900字,建议阅读9分钟 本文为大家介绍图网络的基本概念.网络的应用以及图的结构. 标签:机器学习 目录 一.Why Networks 二.网络的应用     2.1 应用领域 ...

  9. 原创 | 斯坦福Machine Learning with Graphs 学习笔记(第二讲)

    作者:于媛,十三鸣 本文长度为3300字,建议阅读10+分钟 本文为大家介绍常用的网络属性和经典的网络模型. 标签:机器学习 [ 导读 ]在研究网络的时候,我们往往需要从结构层面对网络进行分析,网络属 ...

  10. 《机器学习实战》第8章学习笔记(回归)之预测乐高玩具套装的价格

    原文中通过Google提供的API来抓取价格,但由于现在访问不了Google,所以,直接通过文本给的html文件直接读取价格信息.然后进一步进行分析预测. 代码实现: # -*- coding: ut ...

最新文章

  1. 语法手册_是真的猛!SQL 语法速成手册
  2. 高并发IM系统架构优化实践
  3. Hexo瞎折腾系列(5) - 使用hexo-neat插件压缩页面静态资源
  4. 高斯消元法的c语言编程,列主元高斯消元法的C语言编程
  5. PyCharm平台下初学Django框架
  6. python编程可以做什么菜_Python 编程! 我是菜菜菜鸟 大家帮帮忙
  7. java 计算器 junit测试_测试工具之JUnit4 结合Mockito模拟测试代码
  8. asx根据时间点播放
  9. 图书管理系统E-R图转关系图
  10. java中的Properties配置文件
  11. 博士申请 | 加拿大阿尔伯塔大学韩杰教授招收电子与计算机专业博士/博后
  12. openldap中的Mirror mode模式中的主主同步
  13. 测试03:2022上半年:无处安放的空虚感
  14. 建立一个复数类Complex,其私有数据成员mX和mY表示复数的实部和虚部,构造函数Complex用于对复数的实部和虚部初始化
  15. 学习笔记:匿名通信与暗网研究综述
  16. 【硬核万字总结】看完这20道Redis面试题,女朋友都面上阿里了
  17. Git版本控制管理——版本库管理
  18. 机房动环监控系统方案组成及应用
  19. Nodeparty-SZ-1 深圳聚会活动回顾总结[2012.01.08] - CNode
  20. Android设置顶部状态栏颜色

热门文章

  1. Groovy框架Spock随0.6大发布
  2. Springboot 注解最全详解
  3. 图计算论文笔记--SPARC: Self-Paced Network Representation for Few-Shot Rare Category Characterization
  4. React+Echarts 实时数据监控刷新
  5. python中forward是什么意思_pytorch 调用forward 的具体流程
  6. win下装django
  7. 成功解决hostname ‘xxx‘ doesn‘t uniquely match the interface ‘ens33‘ selected for the management bridge
  8. 126邮箱自动登录程序
  9. MRAM学习笔记——3.SOT-MTJ SPICE model解析
  10. dax-自定义周做同比和环比