机器学习python实战——决策树
2015-12-06 20:32
597 查看
决策树的构造
决策树定义
决策树算法是一种逼近离散函数值的方法通过把实例从根节点排列到某个叶子结点来对实例分类。叶子结点即为实例所属的分类。树上的每一个结点指定了对实例的某个属性的测试,并且该结点的每一个后继分支对应于该属性的一个可能值。分类实例的方法是从这棵树的根节点开始,测试这个结点的属性,然后按照给定实例的属性值对应的树枝向下移动。然后这个过程在以新结点的根的子树上重复。
决策树优缺点
适用数据类型:数值型和标称型。优点:计算复杂度不高,输出结果易于理解,对中间值的缺失不敏感,可以处理不相关特征数据。
缺点:可能会产生过度匹配问题。
伪代码createBranch()
构造决策树的时候,第一个需要解决的问题是:当前数据集上哪个特征在划分数据分类时起决定性作用。为了找到决定性的特征,划分出最好的结果,我们必须评估每个特征。完成测试之后,原始数据集就被划分为几个数据子集。这些数据子集会分布在第一个决策点的所有分支上。如果某个分支下的数据属于同一类型,则当前已经正确划分数据类型如果数据不属于同一类型,则需要重复划分数据子集的过程。
如何划分数据子集的算法和划分原始数据集的方法相同,直到所有具有相同类型的数据均在一个数据子集内。
createBranch():
检测数据集中的每个子项是否属于同一分类: if so return 类标签; else 寻找划分数据集的最好特征 划分数据集 创建分支节点 for 每个划分的子集 调用函数createBranch并增加返回结果到分支节点中 return 分支节点
决策树的一般流程
收集数据准备数据:树构造算法只适用于标称型数据,因此数值型数据必须离散化。
分析数据:可以使用任何方法,构造树完成之后,我们应该检查图形是否符合预期。
训练算法:使用经验树计算错误率
测试算法:使用经验树计算错误率。
使用算法
ID3算法划分数据集
信息增益(information gain)
划分数据的最大原则是:将无序的数据变得更加有序。在划分数据集之前之后信息发生的变化称为信息增益,计算每个特征值划分数据集获得的信息增益,活的信息增益最高的特征就是最好的选择。
如何计算信息增益?我们利用熵来度量(还有一种叫做基尼不纯度Gini impurity)
集合信息的度量方式称为熵,熵定义为信息的期望值
那么信息的定义:
如果待分类的事务可能划分在多个分类之中,则符号xi的信息定义:
l(xi)=-log2p(xi) 其中p(xi) 是选择该分类的概率
计算熵的公式 H=-p(xi)log2p(xi)(从i=1到n求和)
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
划分数据集
相关文章推荐
- Python动态类型的学习---引用的理解
- Python3写爬虫(四)多线程实现数据爬取
- 垃圾邮件过滤器 python简单实现
- 下载并遍历 names.txt 文件,输出长度最长的回文人名。
- install and upgrade scrapy
- Scrapy的架构介绍
- Centos6 编译安装Python
- 使用Python生成Excel格式的图片
- 让Python文件也可以当bat文件运行
- [Python]推算数独
- Python中zip()函数用法举例
- Python中map()函数浅析
- Python将excel导入到mysql中
- Python在CAM软件Genesis2000中的应用
- 使用Shiboken为C++和Qt库创建Python绑定
- FREEBASIC 编译可被python调用的dll函数示例
- Python 七步捉虫法