1.决策树简介
- 概念:根据数据的属性采用树状结构建立的一种决策模型。
- 适用:解决分类和回归问题。
- 常见算法:
–CART(Classification And Regression Tree),
–ID3,
–C4.5
简要理解呢,决策树就是把一堆散乱的数据按照一定的规则构建成直观明了的树形图!这些规则也就是树结构的创建过程就是机器学习的过程(本例采用ID3算法)。
而不同的规则选取方式,会直接影响树形图的简明直观程度。所以如何构建最佳规则成为最重要的问题! 为了有效的衡量当前选取规则是否为最佳规则,引入信息增益的概念。
信息增益 — 最好特征选取的规则
- 概念:划分数据集前后数据发生的变化成为信息增益。
- 度量方法:信息熵的改变量熵(信息的期望值): H=-Σp(xi)log(p(xi)) xi的信息熵: l(xi)=p(xi)log(1/p(xi)) =-p(xi)log(p(xi))
信息增益H(D,A)= 原始数据集的信息熵H(D) - 特征A对数据集进行划分后信息熵H(D/A)
2.构造决策树
2.1计算给定数据集的香农熵
#计算数据的香农熵
from math import log
def calcShannonEnt(dataSet):
numEntris = len(dataSet) #获取数据集的总条数
labeCounts = {} #创建一个字典
for feacVec in dataSet: #获取每一行数据的特征向量
currentLable = feacVec[-1] #获取特征向量最后1列的标签
if currentLable not in labeCounts.keys(): #检测该标签是否存在于字典的关键字keys()中
labeCounts[currentLable] = 0 # 如果不在,则添加该标签的键值对
labeCounts[currentLable] += 1 #该标签的值+1
Ent = 0.0 #熵
for key in labeCounts:
prob = float(labeCounts[key])/numEntris