1.梯度上升优化

1). 伪代码:

所有回归系数初始化为1-------------------weights = ones((colNum,1))

重复r次:

  计算整个数据集的梯度gradient

  使用alpha*gradient更新回归系数的向量

  返回回归系数weights

2). 迭代r次的代码:

  

for k in range(r):              #heavy on matrix operations
h = sigmoid(dataMatrix*weights) #matrix mult
error = (labelMat - h) #vector subtraction
weights = weights + alpha * dataMatrix.transpose()* error #matrix mult

2.随机梯度上升

梯度上升算法每次更新回归系数都要遍历整个数据集(批处理),样本集数十亿时复杂度相当高。

一种改进方法是一次仅用一个样本点来更新回归系数(在线学习),该方法称为“随机梯度上升算法”。

1). 伪代码:

  所有回归系数初始化为1

  对数据集中每个样本:

    计算该样本梯度gradient

    使用alpha*gradient更新回归系数的向量

  返回回归系数weights

2). 用每个样本点更新回归系数代码:

for i in range(m):
h = sigmoid(sum(dataMatrix[i]*weights))
error = classLabels[i] - h
weights = weights + alpha * error * dataMatrix[i]

3. 1与2比较:

1加载的是列表,用numpy.mat()转成矩阵计算,计算中是向量运算。2加载数据时就已通过numpy.array()转换列表数据为数组数据类型,计算中是数值运算。

4. 改进随机梯度上升

一种判断优化算法优劣的可靠方法是看它是否收敛,也就是说参数是否达到了稳定值,是否还会不断变化。

将2在整个数据集运行200次,绘制出X0,X1,X2三个回归系数的变化情况。发现1)系数2较快达到稳定值,2)大波动停止后,还有周期性小波动,原因是存在一些不能正确分类的样本点(数据及非线性可分),在每次迭代时引发系数剧烈改变。

期望改进:1)避免来回波动,从而收敛到某个值;2)加快收敛速度

改进随机梯度上升算法更新回归系数代码:

for j in range(numIter):
dataIndex = range(m)
for i in range(m):
alpha = 4/(1.0+j+i)+0.0001 #apha decreases with iteration, does not
randIndex = int(random.uniform(0,len(dataIndex)))#go to 0 because of the constant
h = sigmoid(sum(dataMatrix[randIndex]*weights))
error = classLabels[randIndex] - h
weights = weights + alpha * error * dataMatrix[randIndex]
del(dataIndex[randIndex])

改进之处:

1)alpha = 4/(1.0+j+i)+0.0001,alpha在每次迭代中都会作调整,缓解数据波动或高频波动。alpha每次减少1/(j+i),j是迭代次数,i表示本次迭代中第i个选出来的样本,当j<<max(i)时,alpha就不是严格下降的。类似模拟退火等其他优化算法中避免参数严格下降。另alpha永远不会减小到0,因为存在常数项,保证在多次迭代后新数据仍有影响。如要处理的问题是动态变化,可适当加大上述常数项,确保新值获得更大回归系数。

2)通过随机选取样本更新回归系数,减小周期波动。这种方法每次随机从列表中选出一个值,然后从列表删除改值(再进行下次迭代)。

效果:与梯度上升分割数据效果差不多,但迭代次数远小于后者,前者20次,后者500次。另系数周期性波动有缓解。

5.画图

Andrew Ng在Cousera ML课中用Octave绘制Decision Boundary,本节中用python matplot实现相同分隔线绘制。本节中还有参数在迭代中变化情况的绘制。

6.数据预处理

数据集来自UCI机器学习数据库http://archive.ics.uci.edu/ml/datasets/Horse+Colic。该数据集有的指标比较主观,有的难以测量(如疼痛程度等)。另数据集有30%数据缺失。

比较用Pandas,R,和Excel处理数据集中缺失值,Excel处理如此次数据量不大、结构不复杂的数据集较为方便。

用Excel将数据集保存为文本分隔文件,缺失值全部用0替换,NumPy数据类型不允许包含缺失值。选择0来替换,恰好适用于Logistic回归。回归系数更新公式如下:

weights = weights + alpha * error * dataMatrix[randIndex]

如果dataMatrix某个特征对应值为0,那么系数将不做更新。

Logistic回归小结的更多相关文章

  1. Logistic回归分类算法原理分析与代码实现

    前言 本文将介绍机器学习分类算法中的Logistic回归分类算法并给出伪代码,Python代码实现. (说明:从本文开始,将接触到最优化算法相关的学习.旨在将这些最优化的算法用于训练出一个非线性的函数 ...

  2. 第五章:Logistic回归

    本章内容 □sigmod函数和logistic回归分类器 □最优化理论初步□梯度下降最优化算法□数据中的缺失项处理 这会是激动人心的一章,因为我们将首次接触到最优化算法.仔细想想就会发现,其实我们日常 ...

  3. 机器学习实践之Logistic回归

        关于本文说明,本人原博客地址位于http://blog.csdn.net/qq_37608890,本文来自笔者于2017年12月17日 19:18:31所撰写内容(http://blog.cs ...

  4. 第七篇:Logistic回归分类算法原理分析与代码实现

    前言 本文将介绍机器学习分类算法中的Logistic回归分类算法并给出伪代码,Python代码实现. (说明:从本文开始,将接触到最优化算法相关的学习.旨在将这些最优化的算法用于训练出一个非线性的函数 ...

  5. Logistic回归python实现小样例

    假设现在有一些点,我们用一条直线对这些点进行拟合(该线称为最佳拟合直线),这个拟合过程就称作回归.利用Logistic回归进行分类的主要思想是:根据现有数据对分类边界线建立回归公式,依次进行分类.Lo ...

  6. 【4】Logistic回归

    前言 logistic回归的主要思想:根据现有数据对分类边界建立回归公式,以此进行分类 所谓logistic,无非就是True or False两种判断,表明了这其实是一个二分类问题 我们又知道回归就 ...

  7. 吴裕雄--天生自然python机器学习:使用Logistic回归从疝气病症预测病马的死亡率

    ,除了部分指标主观和难以测量外,该数据还存在一个问题,数据集中有 30%的值是缺失的.下面将首先介绍如何处理数据集中的数据缺失问题,然 后 再 利 用 Logistic回 归 和随机梯度上升算法来预测 ...

  8. [机器学习实战-Logistic回归]使用Logistic回归预测各种实例

    目录 本实验代码已经传到gitee上,请点击查收! 一.实验目的 二.实验内容与设计思想 实验内容 设计思想 三.实验使用环境 四.实验步骤和调试过程 4.1 基于Logistic回归和Sigmoid ...

  9. 神经网络、logistic回归等分类算法简单实现

    最近在github上看到一个很有趣的项目,通过文本训练可以让计算机写出特定风格的文章,有人就专门写了一个小项目生成汪峰风格的歌词.看完后有一些自己的小想法,也想做一个玩儿一玩儿.用到的原理是深度学习里 ...

随机推荐

  1. :before\:after伪元素用法

    :before和:after这两个伪元素在真正的页面元素之前和之后插入一个额外的的元素,等效于下面的代码: <p> <span>:before</span> HTM ...

  2. mac攻略(二) -- 简单配置php开发环境

    最简单直接的方式还是使用 Mac 上自带的 Apache 和 PHP.   1.启动 Apache 1>启动apache $sudo apachectl start; 2>启动后,在浏览器 ...

  3. selenium操作滚动条方法

    /***  滚动条滚到最下方,和滚到指定位置*/@Test(priority =1 )    public void scrollingToBottomo(){        //使用JavaScri ...

  4. InputStream,BufferedImage与byte数组之间的转换

    需要获取网络的一张图片,但是某种需要,要把获取的这段流输入换为BufferedImage流,有的地方还需要转换为byte[]. 获得图片地址,获得了一个图片输入流,例如:    Url img = n ...

  5. python成长之路【第七篇】:面向对象

    概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发“更快更好更强...” 面向对象三大特性 面向 ...

  6. 转:画图解释 SQL join 语句

    画图解释 SQL join 语句 我认为 Ligaya Turmelle 的关于SQL联合(join)语句的帖子对于新手开发者来说是份很好的材料.SQL 联合语句好像是基于集合的,用韦恩图来解释咋一看 ...

  7. java complier compliance level问题引发的思考

    http://blog.csdn.net/shan9liang/article/details/17266519 ******************************************* ...

  8. linux下tar.gz、tar、bz2、zip等解压缩、压缩命令小结

    Linux下最常用的打包程序就是tar了,使用tar程序打出来的包我们常称为tar包,tar包文件的命令通常都是以.tar结尾的.生成tar包后,就可以用其它的程序来进 行压缩了,所以首先就来讲讲ta ...

  9. spring boot初探

    又被领导鄙视了,说让先把程序跑起来,再去研究深层次的东西.. 我又一次没有学会走就要开始跑了..说干就干 eclipse mars下载 新建maven project 加依赖 <dependen ...

  10. 从零搭建mongo分片集群的简洁方法

    一.目录 1.mongo路径,config数据路径,shard数据路径