机器学习实战之决策树(1)---ID3算法与信息熵,基尼不纯度
来源:互联网 发布:网络贷款 申请流程 编辑:程序博客网 时间:2024/04/30 08:33
(1)关于ID3算法百度文库有一篇十分详细的文章,介绍看一个例子,给出了具体的计算过程。
文章链接:http://wenku.baidu.com/view/7933c2f6f61fb7360b4c65fd.html
这是最后的决策树的形状,来源是百度文库。
另有一篇CSDN博客介绍ID3算法:http://blog.csdn.net/zhaoyl03/article/details/8665663
基本思想:
基本思想:
角度1. 越是小型的决策树越优于大的决策树(尽管如此该算法也不是总是生成最小的树形结构)
角度2. 引入信息论中互信息(信息增益),作为判别因素的度量,即:以信息熵的下降速度作为选取测试属性的标准,所选的测试属性是从根到当前节点的路径上尚未被考虑的具有最高信息增益的属性
香农熵的公式:
p(x)是选择这个分类特征S,导致的分类情况x的概率。二分类情况x只有正负两种。
下面给出计算给定数据集计算香农熵的Python代码:
- from math import log
- #计算给定数据集的香农熵
- def calcShannonEnt(dataSet):
- numEntries = len(dataSet)
- labelCounts = {}
- for featVec in dataSet:
- currentLabel = featVec[-1]
- #为所有的可能分类创建字典
- if currentLabel not in labelCounts.keys():
- labelCounts[currentLabel] = 0
- labelCounts[currentLabel] += 1
- shannonEnt = 0.0
- for key in labelCounts:
- prob = float(labelCounts[key]) / numEntries
- shannonEnt -= prob * log(prob, 2)
- return shannonEnt
- #创建简单的数据集
- def createDataSet():
- dataSet = [[1, 1, 'yes'], [1, 1, 'yes'], [1, 0, 'no'], [0, 1, 'no'], [0, 1, 'no']]
- labels = ['no surfacint', 'flippers']
- return dataSet, labels
在shell中:
- >>> import trees
- >>> reload(trees)
- <module 'trees' from 'trees.pyc'>
- >>> myDat, labels = trees.createDataSet()
- >>> myDat
- [[1, 1, 'yes'], [1, 1, 'yes'], [1, 0, 'no'], [0, 1, 'no'], [0, 1, 'no']]
- >>> trees.calcShannonEnt(myDat)
- 0.9709505944546686
- >>>
如果修改第一个数据,增加‘maybe’类别,熵会变大。。。(因为划分出来类多一点,更有利于降低树高度?)
- >>> myDat[0][-1] = 'maybe'
- >>> myDat
- [[1, 1, 'maybe'], [1, 1, 'yes'], [1, 0, 'no'], [0, 1, 'no'], [0, 1, 'no']]
- >>> trees.calcShannonEnt(myDat)
- 1.3709505944546687
或者直接加上一个分类数据,也变大,如果不多分类,但是增加一组数据,会比最开始的大。
- >>> myDat.append([1, 1, 'maybe'])
- >>> myDat
- [[1, 1, 'yes'], [1, 1, 'yes'], [1, 0, 'no'], [0, 1, 'no'], [0, 1, 'no'], [1, 1, 'maybe']]
- >>> trees.calcShannonEnt(myDat)
- 1.4591479170272448
- >>> myDat[5][-1] = 'yes'
- >>> myDat
- [[1, 1, 'yes'], [1, 1, 'yes'], [1, 0, 'no'], [0, 1, 'no'], [0, 1, 'no'], [1, 1, 'yes']]
- >>> trees.calcShannonEnt(myDat)
- 1.0
综上,如果分类之后,产生的新的数据集,可以划分更多的分类出来,熵增加;可以有更多的数据集包括进来,熵增加。可以按照获取最大信息熵的标准来划分数据集。
(2)基尼不纯度(来自新浪博客:http://blog.sina.com.cn/s/blog_61d2047c01018u9g.html)
转载:机器学习实战之决策树(1)---ID3算法与信息熵,基尼不纯度
0 0
- 机器学习实战之决策树(1)---ID3算法与信息熵,基尼不纯度
- 机器学习实战之决策树(1)---ID3算法与信息熵,基尼不纯度
- 机器学习实战之决策树(1)---ID3算法与信息熵,基尼不纯度
- 《机器学习实战》之ID3决策树算法
- 机器学习实战之决策树ID3算法
- 《机器学习实战》决策树(ID3算法)的分析与实现
- 机器学习实战之 决策树——ID3算法
- 机器学习实战 (2)决策树 (一) ID3算法
- 机器学习实战—ch03 .决策树(ID3算法)
- 机器学习实战【2】(决策树ID3算法)
- 机器学习笔记之信息熵、信息增益和决策树(ID3算法)
- 机器学习之决策树(ID3)算法与Python实现
- 机器学习之决策树,ID3算法
- 《机器学习实战》ID3-决策树
- 机器学习实战 (2)决策树 (二) 决策树ID3算法的优缺点
- 机器学习算法-决策树ID3
- 机器学习--决策树(ID3)算法
- 机器学习-决策树 ID3算法
- POJ1091 跳蚤 素因子分解+容斥原理
- github入门和GitHub for Windows教程整理
- GoldenGate的ADD SCHEMATRANDATA命令研究
- Spring学习笔记(8)----属性注入的方式
- 226Invert Binary Tree
- 机器学习实战之决策树(1)---ID3算法与信息熵,基尼不纯度
- Android Activity管理类,管理Activity和退出应用
- linux下关于后台任务和前台任务之间的且切换命令小结
- 一个任务调度问题
- Spring学习笔记(9)----让Spring自动扫描和管理Bean
- GRE作文备考——经济对环境的影响
- 常用linux命令
- 机器学习中的相似性度量
- 牛顿法