决策树进阶

来源:互联网 发布:海信网络电视价格 编辑:程序博客网 时间:2024/06/04 18:57

一、决策树基础回顾
决策树有三种算法:ID3,C4.5以及CART。ID3用的是信息增益准则,偏好于可取值数目较多的属性。C4.5介于信息增益准则和增益率准则之间,先从候选划分属性中找出信息增益高于平均水平的属性,然后从这些属性中选择增益率最大的,这样在选择结点时受属性的取值数目影响较小。CART算法则是和ID3算法异曲同工,只是衡量数据集的纯度所用的方法不一样,CART用基尼值来度量数据集的纯度。
二、决策树的剪枝处理
剪枝是决策树学习算法对付“过拟合”的主要手段。决策树的剪枝的基本策略有“预剪枝”和“后剪枝。

预剪枝是自上而下,先找出最优属性,若当前节点的划分不能使决策树的泛化性能得到提升,则停止划分。用“验证集”的数据衡量泛化性能,若验证集在该节点划分前的精度(准确率)大于该节点划分后的精度(准确率)则进剪掉该节点。有些分支当前的划分不能提升泛化性能,但是在后续的划分中却有可能使泛化性能提升,因此预剪枝有欠拟合的风险。

后剪枝则是先从训练集生成一颗完整的决策树,然后自底向上比较结点划分前后验证集的精度,若该节点替换为叶节点后泛化能力提升,则剪枝。后剪枝决策树通常比预剪枝决策树保留了更多的分支,一般情形下,欠拟合风险很小,但训练时间开销要比预剪枝大很多。

三、连续值与缺失值的处理
1、连续值
(1)把连续属性离散化,然后再用决策树的算法。
2、缺失值的处理
某些样本在某些属性上有缺失值,根据某一划分属性计算信息增益时先把该属性上有缺失值的样本拿出来,获得信息增益最大的属性为结点,然后根据属性各取值的概率,即为有缺失值样本的权重进入该节点的各分支中。

四、决策树ID3算法Python代码的实现
代码和数据均选自《Python数据分析与挖掘实战》决策树那节
链接:数据和代码
数据入下:
这里写图片描述

inputfile = 'C:/Users/Administrator/Desktop/sales_data.xls'data = pd.read_excel(inputfile, index_col = u'序号') #导入数据,行指标为'列指标是序号的'那列数据#数据是类别标签,要将它转换为数据,用u' '#用1来表示“好”、“是”、“高”这三个属性,用-1来表示“坏”、“否”、“低”data[data == u'好'] = 1data[data == u'是'] = 1data[data == u'高'] = 1data[data != 1] = -1x = data.iloc[:,:3].astype(int)  #选取前三列数据y = data.iloc[:,3].astype(int)  #选取第四列数据,一定要设置x和y的数据类型from sklearn.tree import DecisionTreeClassifier as DTCdtc = DTC(criterion='entropy') #建立决策树模型,基于信息熵dtc.fit(x, y) #训练模型#导入相关函数,可视化决策树。#导出的结果是一个dot文件,需要安装Graphviz才能将它转换为pdf或png等格式。from sklearn.tree import export_graphvizfrom sklearn.externals.six import StringIOwith open("tree.dot", 'w') as f:  f = export_graphviz(dtc, feature_names = x.columns, out_file = f)

运行代码后,将会输出一个tree.dot的文本文件,打开这个文本文件,把第二行改为
edge [fontname=”SimHei”];
node fontname=”SimHei”]; /添加这两行,输出为中文字体/

Windows下安装Graphviz:Graphviz安装包
下载graphviz-2.38.msi,安装graphviz-2.38.msi,一路安装即可。
添加环境变量:打开计算机-系统属性,高级-环境变量,新建用户变量。变量值是安装完之后,Graphvit2.38下bin文件的路径。
这里写图片描述
然后打开gvedit.exe, file-open,打开tree.dot文件,运行即可。
这里写图片描述

原创粉丝点击