决策树(Decision Tree)是在已知各种情况发生概率的基础上,通过构成决策树来求取净现值的期望值大于等于零的概率,评价项目风险,判断其可行性的决策分析方法,是直观运用概率分析的一种图解法。
决策树是一种树形结构,其中每个内部节点表示一个属性上的测试,每个分支代表一个测试输出,每个叶节点代表一种类别。
今天是第一个内容:
特征选择:
首先提出熵的概念:熵是表示随机变量不确定性的度量。
X:表示当前的数据集合。
x:表示当前数据集合中的第k类,也就是我们目标变量的类型。
熵越大,证明越不稳定。
我们用信息熵来衡量一个分支的纯度,那哪个特征是最优的特征呢?在决策树学习中应用信息增益准则来选择最优特征。信息增益定义如下:
对训练集D,计算每个特征的信息增益熵,并比较大小,选择最大的特征。
信息增益熵计算的代码:
数据使用的是《统计学习方法》上的例题:
import pandas as pd
import math
from math import log
datasets = [['青年', '否', '否', '一般', '否'],
['青年', '否', '否', '好', '否'],
['青年', '是', '否', '好', '是'],
['青年', '是', '是', '一般', '是'],
['青年', '否', '否', '一般', '否'],
['中年', '否', '否', '一般', '否'],
['中年', '否', '否', '好', '否'],
['中年', '是', '是', '好', '是'],
['中年', '否', '是', '非常好', '是'],
['中年', '否', '是', '非常好', '是'],
['老年', '否', '是', '非常好', '是'],
['老年', '否', '是', '好', '是'],
['老年', '是', '否', '好', '是'],
['老年', '是', '否', '非常好', '是'],
['老年', '否', '否', '一般', '否'],
]
labels = [u'年龄', u'有工作', u'有自己的房子', u'信贷情况', u'类别']
t1 = pd.DataFrame(datasets, columns=labels)
#计算熵
def ent(t1):
p = t1.columns.values[-1]
label = set(t1.loc[:,p])
re = -sum(len(t1[t1[p] == x]) / len(t1) * log(len(t1[t1[p] == x]) / len(t1) , 2) for x in label)
return round(re , 3)
#计算分量熵
def ent_class(t1):
p = t1.columns.values[-1]
label = set(t1.loc[:,p])
len_to = len(t1)
col = t1.columns.values[:-1]
re = {}
for i in col:
val = set(t1.loc[:,i].values)
r = sum(len(t1[t1[i] == j]) / len_to * ent(t1[t1[i] == j]) for j in val)
re[i] = round(r , 3)
return re
def ent_plus(t1):
dic = ent_class(t1)
all = ent(t1)
for i in dic:
print(i + "-info-gain- " + str(round(all - dic[i],3)))
选择信息增益熵最大的“有自己的房子”作为第一个特征。