机器学习笔记----- ID3算法的python实战
本文申明:本文原创,如有转载请申明。数据代码来自实验数据都是来自【美】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实战的更多相关文章
- 机器学习之决策树(ID3)算法与Python实现
机器学习之决策树(ID3)算法与Python实现 机器学习中,决策树是一个预测模型:他代表的是对象属性与对象值之间的一种映射关系.树中每个节点表示某个对象,而每个分叉路径则代表的某个可能的属性值,而每 ...
- python机器学习笔记 ID3决策树算法实战
前面学习了决策树的算法原理,这里继续对代码进行深入学习,并掌握ID3的算法实践过程. ID3算法是一种贪心算法,用来构造决策树,ID3算法起源于概念学习系统(CLS),以信息熵的下降速度为选取测试属性 ...
- 机器学习决策树ID3算法,手把手教你用Python实现
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第21篇文章,我们一起来看一个新的模型--决策树. 决策树的定义 决策树是我本人非常喜欢的机器学习模型,非常直观容易理解 ...
- 决策树之ID3算法实现(python)
决策树的概念其实不难理解,下面一张图是某女生相亲时用到的决策树: 基本上可以理解为:一堆数据,附带若干属性,每一条记录最后都有一个分类(见或者不见),然后根据每种属性可以进行划分(比如年龄是>3 ...
- 李宏毅机器学习课程笔记-2.5线性回归Python实战
本文为作者学习李宏毅机器学习课程时参照样例完成homework1的记录. 任务描述(Task Description) 现在有某地空气质量的观测数据,请使用线性回归拟合数据,预测PM2.5. 数据集描 ...
- 机器学习笔记--KNN算法2-实战部分
本文申明:本系列的所有实验数据都是来自[美]Peter Harrington 写的<Machine Learning in Action>这本书,侵删. 一案例导入:玛利亚小姐最近寂寞了, ...
- [置顶] ID3算法的python实现
这篇文章的内容接着http://blog.csdn.net/xueyunf/article/details/9214727的内容,所有还有部分函数在http://blog.csdn.net/xueyu ...
- 机器学习笔记—svm算法(上)
本文申明:本文原创,如转载请注明原文出处. 引言:上一篇我们讲到了logistic回归,今天我们来说一说与其很相似的svm算法,当然问题的讨论还是在线性可分的基础下讨论的. 很多人说svm是目前最好的 ...
- 机器学习笔记--KNN算法1
前言 Hello ,everyone. 我是小花.大四毕业,留在学校有点事情,就在这里和大家吹吹我们的狐朋狗友算法---KNN算法,为什么叫狐朋狗友算法呢,在这里我先卖个关子,且听我慢慢道来. 一 K ...
随机推荐
- 千呼万唤岂出来,写款软件不容易——Visual Entity 2.0 发布
在各位用户不继的催更中,终于完成了这次更新.Visual Entity这个软件发布于 2011年,这个软件完成后,便上班去了,也没有做什么推广工作.所以知道的用户并不多,尽管它是个非常好用.并且免费的 ...
- Java学习笔记(二二)——Java HashMap
[前面的话] 早上起来好瞌睡哈,最近要注意一样作息状态. HashMap好好学习一下. [定义] Hashmap:是一个散列表,它存储的内容是键值对(key——value)映射.允许nul ...
- OSPF协议详解
CCNP OSPF协议详解 2010-02-24 20:30:22 标签:CCNP 职场 OSPF 休闲 OSPF(Open Shortest Path Fitst,ospf)开放最短路径优先协议,是 ...
- 遍历Arraylist的方法:
遍历Arraylist的几种方法: Iterator it1 = list.iterator(); while(it1.hasNext()){ System.out ...
- Competition-based User Expertise Score Estimation-20160520
1.Information publication:sigir 2011 author:Jing Liu Harbin Institute of TechnologyMicrosoft Researc ...
- JavaScript学习笔记-new Date() 与 Date() 的区别
var today1 = Date() //返回一个字符串(string),没有getDate等日期对象方法,内容为当前时间 var today2 = new Date() //返回一日期对象,内容为 ...
- 一个Activity掌握Android4.0新控件 (转)
原文地址:http://blog.csdn.net/lavor_zl/article/details/51261380 谷歌在推出Android4.0的同时推出了一些新控件,Android4.0中最常 ...
- Msyql-检测数据库版本
show variables like '%version%'; 数据库版本结果: "protocol_version","" "version&qu ...
- 【转】在mac上配置安卓SDK
众所周知的原因,google的很多网站在国内无法访问,苦逼了一堆天朝程序员,下是在mac本上折腾android 开发环境的过程: 一.先下载android sdk for mac 给二个靠谱的网址: ...
- bzoj3998: [TJOI2015]弦论
SAM小裸题qwq #include <iostream> #include <cstdio> #include <cmath> #include <cstr ...