决策树是个极其易懂的算法,建好模型后就是一连串嵌套的if..else...或嵌套的switch。
优点:计算复杂度不高,输出结果易于理解,对中间值的缺失不敏感,可以处理不相关特征数据;
缺点:可能会产生过度匹配的问题;
适用数据类型:数值型和标称型。
决策树的Python实现:
(一)先实现几个工具函数:计算熵函数,划分数据集工具函数,计算最大概率属性;
(1)计算熵:熵代表集合的无序程度,集合越无序,熵越大;
def entropy(dataset):
from math import log
log2 = lambda x:log(x)/log(2)
results={}
for row in dataset:
r = row[len(row)-1]
results[r] = results.get(r, 0) + 1
ent = 0.0
for r in results.keys():
p = float(results[r]) / len(dataset)
ent=ent-p*log2(p)
return ent
(2)按属性和值获取数据集:
def fetch_subdataset(dataset, k, v):
return [d[:k]+d[k+1:] for d in dataset if d[k] == v]
这个函数只有短短一行,他的意义是:从dataset序列中取得第k列的值为v的子集,并从获得的子集中去掉第k列。python的简单优美显现无遗。(3)计算最大概率属性。在构建决策树时,在处理所有决策属性后,还不能唯一区分数据时,我们采用多数表决的方法来