注:文中相关截图或内容取自《统计学习方法》李航编
简介:
决策树(decision tree)是基本的分类与回归方法。对分类和回归的理解,通俗的讲就是最终结果是离散的为分类任务,结果是连续的是回归任务。决策树中每个非叶节点用一个(多个)特征进行选择向下探索的分支(每个节点相当于“switch 特征i:”的语句或者多个if 、else if的组合),最后探索至叶节点将实例判定为其分类。
如图为关于是否批准贷款的简单决策树:
决策树中节点的分支数根据该节点所选取的特征的值域确定。
信息增益
1.熵
在节点的特征选择上,需要现了解熵、条件熵和信息增益的概念。当前节点的划分特征选择信息增益最大的特征。
其中pi=训练集中该特征值为xi的样本的数量 / 总数。熵越大,随机变量的不确定性越大。
2.条件熵
pij = 在类yi的样本集中该特征值为xi的样本的数量 / 类yi的样本数量
3.信息增益
生成决策树的步骤
- 载入数据,抽象数据特征(数据集D,特征A)
- 计算熵
- 计算每个特征的信息增益,选择信息增益最大的特征作为划分子树集的依据
递归构建决策树
其中(1)(2)(4)为构建叶节点的三种情况,(5)(6)递归构建内节点。给样本分类
案例:
下面通过一个实例来实现这个算法。
项目数据下载及说明,如下链接:
http://archive.ics.uci.edu/ml/datasets/Car+Evaluation
请自行下载数据,以及了解数据的相关内容。
数据样例:
Class Values:
unacc, acc, good, vgood
Attributes:
buying: vhigh, high, med, low.
maint: vhigh, high, med, low.
doors: 2, 3, 4, 5more.
persons: 2, 4, more.
lug_boot: small, med, big.
safety: low, med, high.
样本:
vhigh,vhigh,2,2,small,low,unacc
vhigh,vhigh,2,2,small,med,unacc
vhigh,vhigh,2,2,small,high,unacc
vhigh,vhigh,2,2,med,low,unacc
vhigh,vhigh,2,2,med,med,unacc
vhigh,vhigh,2,2,med,high,unacc
,,,
…
…
代码实现
部分函数
1、载入数据,抽象数据特征
#从文档中读取数据,每条数据转成列表的形式
def readData(path):
dataList = []
with open(path,'r') as f:
dataSet = f.readlines()
for d in dataSet:
d = d[:-1]
d = d.split(',')
dataList.append(d)
return dataList
#映射属性值,方便代码处理
Cls = {
'unacc':0, 'acc':1, 'good':2, 'vgood':3} #分类值映射
#特征值映射,共6个特征值,每个特征表示为X[i],X[i][xiv]表示特征Xi的取值。
X = [{
'vhigh':0, 'high':1, 'med':2, 'low':3},
{
'vhigh':0, 'high':1, 'med':2, 'low':3},
{
'2':