本文申明:本文原,如有转载请申明。据代码来实验数据都是自【美】Peter Harrington 的《Machine Learning in Action,侵

Hello,又和大家见面了,今天心情出奇的好,不知道为什么。就是好。。。此处省略一万字。。。上一次和大家说了,决策树的理论部分,今天我们就来动手帮助眼科医生做一个系统,让这个系统学会给需要隐形眼睛的用户一个建议,让用户可以知道自己适合哪种眼睛。老规矩,系统先从数据中学习。

一:计算给定数据集的香浓熵

大家还记得我们上一讲中求信息增益的公式: ,首先我们求H(D),H(D)为数据D的经验熵,公式为: .求这个公式的代码如下:

熵越高,那么混合的数据也就越多。反之亦然。再一次推荐吴军大神的《数据之美》。通过代码发现,语言真的只是一门工具。JAVA python 都是我们奴隶。不对吗?所以我们并不需要怕我们奴隶,我们只要了解他,征服他就可以了。

二:划分数据集

假如一个魔鬼,把你女神捉去了。魔鬼给你出一道题,让你把包含黑色豆子白色豆子红色豆子的三种豆子按照颜色不同分开,白的和白的在一起,黑的在一起,红的在一起。这是不是很简单,其实划分数据集也是这么简单。看数据中的某一特征项,然后,把这个项中相同的一项放在一起,不同的分开。这就是划分数据集。代码如下:

三:选择最好的划分数据集的方式

你划分了数据集,但是却不知道,你划分的数据集是不是最好的划分,大家都知道ID3算法的核心部分是根据信息增益来判断这样划分好不好。划好了第一个其他就递归下就可以了。代码如下:

其实,上面的一二三部分就是求我们的信息增益比公式。那么接下来就是构造一个决策树,然后在把多余的树枝给裁剪了,不就行了么?哈哈,听着简单吧,其实就很简单.

四:构建一个决策树
1:多数表决

其实有时候,特征数目并不是在每次划分数据分组的时候都减少,所以我们要在算法开始运行前计算列的数目,让我们知道算法是否使用了所有属性就可以了。如果数据集已经处理了所有属性。但是类标签依然不是唯一的,那么我们需要决定如何定义该叶子阶段。那个我们该如何定义叶子节点呢?

仔细想想这个是不是一个小型的分类问题,既然是分类问题,那么我们是不是可以用上一张说的KNN算法中的多数表决的方法。(多数表决的方法,就好像我们的民主投票,天朝嘛,你懂得。。这个我倒是对美国的民主大选颇赞同)。

多数表决代码如下:

KNN代码如下:

大家可以比较一下,是不是很像。

2:创建树

上面我们已经说过,第一次判定之后,我们只需要递归地调用判定函数就可以了。

递归结束的两个判定条件为:

1:所有的类标签完全相同,返回类标签(这不是废话么,都一样了,还分毛的类)

2:使用完了所有的分组还是不能将数据集划分成仅包含唯一类别的分组,既然无法返回唯一的,那么我们就被代表一波吧。就是我们上文的多数表决机制,返回出现次数最多的类别。这不就是人民代表大会制度吗, 。

代码如下:

大家有看不懂的可以私聊我,我帮你解答。

现在我们来测试一下,测试结果如下:

咦,似乎挺好用的样子。。。

五.使用决策树预测隐形眼镜类型

1)收集数据

2)准备数据

3)分析数据

4)训练数据

5)测试数据

6)使用算法

这六个步骤是我们研究机器学习必须经过的六个步骤,大家一定要牢记。

隐形眼镜的测试数据结果:

链接:http://pan.baidu.com/s/1bpolbBL 密码:mzjj   这个是这个实验的源代码。适合2.7版本的Python环境,请用3.x的童鞋,根据新特性修改。

机器学习笔记----- ID3算法的python实战的更多相关文章

  1. 机器学习之决策树(ID3)算法与Python实现

    机器学习之决策树(ID3)算法与Python实现 机器学习中,决策树是一个预测模型:他代表的是对象属性与对象值之间的一种映射关系.树中每个节点表示某个对象,而每个分叉路径则代表的某个可能的属性值,而每 ...

  2. python机器学习笔记 ID3决策树算法实战

    前面学习了决策树的算法原理,这里继续对代码进行深入学习,并掌握ID3的算法实践过程. ID3算法是一种贪心算法,用来构造决策树,ID3算法起源于概念学习系统(CLS),以信息熵的下降速度为选取测试属性 ...

  3. 机器学习决策树ID3算法,手把手教你用Python实现

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第21篇文章,我们一起来看一个新的模型--决策树. 决策树的定义 决策树是我本人非常喜欢的机器学习模型,非常直观容易理解 ...

  4. 决策树之ID3算法实现(python)

    决策树的概念其实不难理解,下面一张图是某女生相亲时用到的决策树: 基本上可以理解为:一堆数据,附带若干属性,每一条记录最后都有一个分类(见或者不见),然后根据每种属性可以进行划分(比如年龄是>3 ...

  5. 李宏毅机器学习课程笔记-2.5线性回归Python实战

    本文为作者学习李宏毅机器学习课程时参照样例完成homework1的记录. 任务描述(Task Description) 现在有某地空气质量的观测数据,请使用线性回归拟合数据,预测PM2.5. 数据集描 ...

  6. 机器学习笔记--KNN算法2-实战部分

    本文申明:本系列的所有实验数据都是来自[美]Peter Harrington 写的<Machine Learning in Action>这本书,侵删. 一案例导入:玛利亚小姐最近寂寞了, ...

  7. [置顶] ID3算法的python实现

    这篇文章的内容接着http://blog.csdn.net/xueyunf/article/details/9214727的内容,所有还有部分函数在http://blog.csdn.net/xueyu ...

  8. 机器学习笔记—svm算法(上)

    本文申明:本文原创,如转载请注明原文出处. 引言:上一篇我们讲到了logistic回归,今天我们来说一说与其很相似的svm算法,当然问题的讨论还是在线性可分的基础下讨论的. 很多人说svm是目前最好的 ...

  9. 机器学习笔记--KNN算法1

    前言 Hello ,everyone. 我是小花.大四毕业,留在学校有点事情,就在这里和大家吹吹我们的狐朋狗友算法---KNN算法,为什么叫狐朋狗友算法呢,在这里我先卖个关子,且听我慢慢道来. 一 K ...

随机推荐

  1. JAVA多线程(二)

    Synchronized的使用: (一)synchronized:  Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码. 当某个方法或者代 ...

  2. Android复习笔记--Intent

    Intent是Android中各组件跳转的重要方式,一般可悲用于启动活动.启动服务.以及发送广播等场景. #显示Intent 主要主要用于启动已知的组件 //发送方  Intent intent = ...

  3. eclipse下package的命名规范

    Java的包名都有小写单词组成,类名首字母大写:包的路径符合所开发的 系统模块的 定义,比如生产对生产,物资对物资,基础类对基础类.以便看了包名就明白是哪个模块,从而直接到对应包里找相应的实现. 由于 ...

  4. hibernate的hql查询

    1.概念介绍 1.Query是Hibernate的查询接口,用于从数据存储源查询对象及控制执行查询的过程,Query包装了一个HQL查询语句. 2.HQL是Hibernate Query Langua ...

  5. oracle递归查询树的SQL语句

    来自互联网 SELECT * FROM a_ParkingLot AWHERE A.REGIONID IN(    SELECT r.ID FROM a_region r    START WITH ...

  6. Java 构建器

    假如我们的一个实体类有很多的属性值,但是这些属性值又是可选的.如果我们遇到这样的是类,如何设计出方便的实体类呢? 通常解决办法一: 重叠构造器 public class User { private ...

  7. nginx安装配置+清缓存模块安装

    经过一段时间的使用,发现nginx在并发与负载能力方面确实优于apache,现在已经将大部分站点从apache转到了nginx了.以下是nginx的一些简单的安装配置. 环境 操作系统:CentOS. ...

  8. CMY/CMYK 打印机色彩

    CMY 发光物体和反光物体产生颜色的机制不同. 前者指光源光, 它的颜色由发光波长决定. 后者指不能发光但却能表现出颜色的物体, 例如色素. 色素的颜色由它不能吸收的光的波长决定. 比如红色色素, 除 ...

  9. Java追加文件内容的三种方法

    import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io. ...

  10. 自定义View完全解析

    自定义View主要包括以下3种方式: 一.组合控件,利用已有控件的组合,来满足自己的需求. 例子:顶部导航栏 二.继承已有View,比如继承TextView.ImageView等,根据需要重写相应的方 ...