决策树是一个树状结构,它的每一个叶节点对应着一个分类,非叶节点对应着在某个属性上的划分,根据样本在该属性上的不同取值将其划分成若干个子集。构造决策树的核心问题是在每一步如何选择适当的属性对样本做拆分,对一个分类问题,从已知类标记的训练样本中学习并构造出决策树是一个自上而下,分而治之的过程。
常用的决策树算法
决策树算法 | 算法描述 |
---|---|
ID3算法 | 其核心是在决策树的各级节点上,使用信息增益方法作为属性的选择标准,来帮助确定生成每个节点时所应采用的合适属性 |
C4.5算法 | 相对于ID3的改进是使用信息增益率来选择节点属性,克服了ID3的不足:只适用于离散的描述属性,而C4.5既能够处理离散的描述属性,也可以处理连续的描述属性 |
CART算法 | 非参数分类和回归方法,通过构建树,修建树,评估树来构建一个二叉树,当终结点是连续变量时为回归树,当终结点是分类变量时为分类树 |
ID3算法具体流程
决策树-ID3算法
实现步骤如下:
(1)对当前样本集合,计算所有属性的信息增益
(2)选择信息增益最大的属性作为测试属性,把测试属性取值相同的样本划分为同一个子样本集
(3)若子样本集的类别属性只含有单个属性,则分支为叶子节点,否则对子样本集递归调用本算法
ID3算法只能处理离散属性,对于连续性的属性,在分类前需要进行离散化。
#使用ID3决策树算法预测销量高低
import pandas as pd
#参数初始化
filename = 'C:/Users/ASUS/Desktop/Python/chapter5/demo/data/sales_data.xls'
data = pd.read_excel(filename,index_col = u'序号')
#数据是类别标签,要将他转换为数据
#用1来表示“好”,“是”,“高”这三个属性,用-1来表示“坏”,“否”,“低”
data[data == u'好'] = 1
data[data == u'是'] = 1
data[data == u'高'] = 1
data[data != 1] = -1
x = data.iloc[:,:3].astype(int)
y = data.iloc[:,3].astype(int)
from sklearn.tree import DecisionTreeClassifier as DTC
dtc = DTC(criterion='entropy') #建立决策树模型,基于信息熵
dtc.fit(x,y) #训练模型
#导入相关函数,可视化决策树
#导出的结果是一个dot文件,需要安装graphviz才能将他转换为pdf或png格式
from sklearn.tree import export_graphviz
from sklearn.externals.six import StringIO
with open("tree.dot",'w') as f:
f = export_graphviz(dtc,feature_names = x.columns,out_file = f)
安装graphviz工具可视化生成的结果如下: