您的位置:首页 > 编程语言 > Python开发

机器学习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