大家好久不见,实战部分一直托更,很不好意思。本文实验数据与代码来自机器学习实战这本书,倾删。

一:前期代码准备
1.1数据预处理

还是一样,设置两个数组,前两个作为特征值,后一个作为标签。当然这是简单的处理,实际开发中特征值都是让我们自己选的,所以有时候对业务逻辑的理解还是很重要的。

1.2 sigmoid函数设置

1.3固定步长梯度上升算法

这段代码见一面1.4节。

Alpha表示步长,maxcycles表示最大的迭代次数,其中weights=ones((n,1))是初始化一个全部为一的n*1的矩阵。Error就是分类错误的项。大家对于公式:

weights=weights+alpha*dataMatrix.transpose()*error 表示权值是前一个权值+步长*方向(预测值与实际值的差值决定了方向)。

1.4分析数据画出决策边界

这里没什么好说的,就是把两个特征值分别作为横坐标和纵坐标,然后用一条直线分割开来。

1.4.1梯度上升算法效果图

可以看出分错了四个点,但是这个方法计算量太大了。大家来跟着我改进它!

1.4.2随机梯度上升。

实现代码如下:

梯度上升算法在每次更新回归系数的时候都需要遍历整个数据集,这样处理数十亿样本或者成千上万的特征,那还不爆炸么,计算复杂度太高了。一种改进方法是一次仅用一个样本点来更新回归系数,该方法称为梯度上升算法。要根据给出的数据边学习边给结果,所以随机梯度上升算法是一个在线学习算法。

效果图:

等等,小花你在逗我吧。你这个越改越差。刚开始,我们的分类器那么完美,你现在分类的结果是个什么东东啊。哈哈,其实这个游戏本身就是不公平的,梯度上升算法,在整个数据集上迭代了500次才得到的,而第二种才计算了几次。而且判断一个算法优劣的可靠方法是看它是否收敛,也就是随着计算次数的增加参数是否趋于稳定。大家莫急,先等我略施小计。

1.4.2改进的随机梯度上升算法

代码如下:

(1) 让步长变化,加上一个参数表示步长永远不会等于0,保持每次加的数据都会对结果又影响。

(2) 有一个随机的过程从数据集中选取数据来更新参数,选到之后就不选了。

(3) 参数设定,这里设定的是150次迭代,等下我设置500次让大家看看实验结果。

150次迭代如下:

500次迭代如下:

感觉好像没什么变化啊。这就是随机上升梯度算法的奥妙啊。迭代150次和500次一样,这样对时间复杂度的减少意义重大啊,有木有。

二:预测病马死亡率

2.1准备数据:处理数据的缺失值

方法:

1. 删除

最简单的方法是删除,删除属性或者删除样本。如果大部分样本该属性都缺失,这个属性能提供的信息有限,可以选择放弃使用该维属性;如果一个样本大部分属性缺失,可以选择放弃该样本。虽然这种方法简单,但只适用于数据集中缺失较少的情况。

2. 统计填充

对于缺失值的属性,尤其是数值类型的属性,根据所有样本关于这维属性的统计值对其进行填充,如使用平均数、中位数、众数、最大值、最小值等,具体选择哪种统计值需要具体问题具体分析。另外,如果有可用类别信息,还可以进行类内统计,比如身高,男性和女性的统计填充应该是不同的。

3. 统一填充

对于含缺失值的属性,把所有缺失值统一填充为自定义值,如何选择自定义值也需要具体问题具体分析。当然,如果有可用类别信息,也可以为不同类别分别进行统一填充。常用的统一填充值有:“空”、“0”、“正无穷”、“负无穷”等。

4. 预测填充

我们可以通过预测模型利用不存在缺失值的属性来预测缺失值,也就是先用预测模型把数据填充后再做进一步的工作,如统计、学习等。虽然这种方法比较复杂,但是最后得到的结果比较好。

2.2 测试算法

代码:

实验结果:

总结:为什么输出的结果不一样呢,因为里面有一个随机的值啊。

毕竟自己也是在学习,如有错误,请大家不吝赐教。

机器学习实战------利用logistics回归预测病马死亡率的更多相关文章

  1. Logistic回归实战篇之预测病马死亡率

    利用sklearn.linear_model.LogisticRegression训练和测试算法. 示例代码: import numpy as np import matplotlib.pyplot ...

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

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

  3. 机器学习实战 - 读书笔记(14) - 利用SVD简化数据

    前言 最近在看Peter Harrington写的"机器学习实战",这是我的学习心得,这次是第14章 - 利用SVD简化数据. 这里介绍,机器学习中的降维技术,可简化样品数据. 基 ...

  4. 机器学习实战 - 读书笔记(13) - 利用PCA来简化数据

    前言 最近在看Peter Harrington写的"机器学习实战",这是我的学习心得,这次是第13章 - 利用PCA来简化数据. 这里介绍,机器学习中的降维技术,可简化样品数据. ...

  5. 机器学习实战 - 读书笔记(07) - 利用AdaBoost元算法提高分类性能

    前言 最近在看Peter Harrington写的"机器学习实战",这是我的学习笔记,这次是第7章 - 利用AdaBoost元算法提高分类性能. 核心思想 在使用某个特定的算法是, ...

  6. 机器学习实战(Machine Learning in Action)学习笔记————09.利用PCA简化数据

    机器学习实战(Machine Learning in Action)学习笔记————09.利用PCA简化数据 关键字:PCA.主成分分析.降维作者:米仓山下时间:2018-11-15机器学习实战(Ma ...

  7. 《机器学习实战》学习笔记第十四章 —— 利用SVD简化数据

    相关博客: 吴恩达机器学习笔记(八) —— 降维与主成分分析法(PCA) <机器学习实战>学习笔记第十三章 —— 利用PCA来简化数据 奇异值分解(SVD)原理与在降维中的应用 机器学习( ...

  8. 【转载】 机器学习实战 - 读书笔记(07) - 利用AdaBoost元算法提高分类性能

    原文地址: https://www.cnblogs.com/steven-yang/p/5686473.html ------------------------------------------- ...

  9. 《机器学习实战》学习笔记第十三章 —— 利用PCA来简化数据

    相关博文: 吴恩达机器学习笔记(八) —— 降维与主成分分析法(PCA) 主成分分析(PCA)的推导与解释 主要内容: 一.向量內积的几何意义 二.基的变换 三.协方差矩阵 四.PCA求解 一.向量內 ...

随机推荐

  1. SublimeText3下的Python开发环境配置

    最近重装了机器,需要重新安装Python的开发环境,中间遇到了几个问题,特些记录一下,以防下次备忘. 从Python的网站下载安装Python,这个非常简单,没有什么值得说的,大家可以参考廖雪峰的这个 ...

  2. nios II--实验6——串口硬件部分

    串口 硬件开发 新建原理图 打开Quartus II 11.0,新建一个工程,File -> New Project Wizard…,忽略Introduction,之间单击 Next> 进 ...

  3. 帕雷托最优(Pareto optimality)、帕雷托效率(Pareto efficiency)

    帕雷托最优(英语:Pareto optimality),或帕雷托最适,也称为帕雷托效率(英语:Pareto efficiency),是经济学中的重要概念,并且在博弈论.工程学和社会科学中有着广泛的应用 ...

  4. UEFI与MBR区别

     EFI与MBR启动的区别 大硬盘和WIN8系统,让我们从传统的BIOS+MBR模式升级到UEFI+GPT模式,现在购买的主流电脑,都是预装WIN8系统,为了更好的支持2TB硬盘 ,更快速的启动win ...

  5. C# Label显示多行文本及换行(WinForm/WebForm)

    转载: http://www.cnblogs.com/greatverve/archive/2011/10/20/label-multi.html WinForm 很多朋友都会在开发WinForm中遇 ...

  6. HTML5基础知识(1)--上标和下标文本

    1.上标文本标签:<sup>/<sup> 2.下标文本标签:<sub></sub> 3.案例代码 <!doctype html> <h ...

  7. Django-Json 数据返回

    1 .引入Json import json json.dumps(数据)

  8. linux下使用localhost和127.0.0.1都不能连接的解决思路

    linux下刚安装了mysql,尝试写了程序连接mysql,出现了只有用本地ip地址才能连接,而127.0.0.1和localhost都不能访问 解决这个问题主要查看3个方向 .hosts中是否有ip ...

  9. eclipse运行一个类却运行的是另外一个类,报无法加载的类

    今天是用eclipse想运行一个a.java但是却加载是b.java文件,而且还报错:无法加载的主类 查了半天才发现a.java文件中:public static void main(){}这里的ma ...

  10. VS2013无法启动IIS Express Web的解决办法

    关于 ASP.NET Web 开发服务器.本地 IIS和 IIS Express 的区别,请参见<VS2013无法启动IIS Express Web的解决办法>, 此文章最后提到的部分,即 ...