决策树:
决策树方法在分类、预测、规则提取等领域被广泛应用
决策树是树状结构,它的每一个节点对应着一个分类,非叶节点对应着在某个属性上的划分,根据样本在该属性上的不同取值将其划分城若干个子集。
构造决策树的核心问题是在每一步如何选择适当的属性对样本做拆分。
对一个分类问题,从一直分类标价的训练样本中学习并构造出决策树是一个自上而下,分而治之的过程。
ID3算法:
基于信息熵来选择最佳测试属性。在每个非叶节点选择信息增益最大的属性作为测试属性,使分类后数据集的熵最小,从而得到较小的决策树(树的平均深度较小,从而提高分类效率)。
信息熵越小,信息增益越大,不确定性越小
Note:该算法只能处理离散属性,对于连续性的属性,在分类前需要对其进行离散化
- ID3算法实现步骤:
- 对当前样本集合计算所有属性的信息增益;
- 选择信息增益最大的属性作为测试属性,把测试属性取值相同的样本划为同一个子样本集;
- 若子样本集的类倍数行只包含单个属性,则分支为椰子节点,判断其属性值并标上相应的符号,然后返回调用处; 否则对子样本集递归调用本算法。
实例:
[python]
- import pandas as pd
- filename='../file/salesdata.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].as_matrix().astype(int) #选取[0,3)列的所有数据
- y=data.iloc[:,3].as_matrix().astype(int) #选取弟3列的所有数据
- from sklearn.tree import DecisionTreeClassifier as DTC
- dtc=DTC(criterion='entropy') #基于信息熵建立决策树模型
- dtc.fit(x,y) #训练模型
- from sklearn.tree import export_graphviz
- from sklearn.externals.six import StringIO
- x=pd.DataFrame(x)
[python]
- with open("tree.dot",'w') as f:
- f=export_graphviz(dtc,feature_names=x_columns,out_file=f) #导出一个dot文件,需要安装 Graphviz 将它转换为 pdf 或 png 格式
后续操作:
为将以上实例的输出结果转换为可视化格式,需要安装 Graphviz。安装完成后,在 dot.exe 目录下打开 Windows 命令行窗口,执行以下语句:
[plain]
- dot -Tpdf tree.dot -o tree.pdf
Scikit_Learn API :
Methods:
[python]
- sklearn.tree.DecisionTreeClassifier #决策树分类器
Parameters:
criterion: The function to measure the quality of a split. Supported criteria are “gini” for the Gini impurity and “entropy” for the information gain
标准:用于衡量分类质量。默认值为 ‘gini’ 。基尼不纯度方法时的使用值 ‘gini’ (基尼); 信息增益方法时的使用值 ‘entropy’ (熵)
Methods:
Build a decision tree classifier from the training set (X, y). 使用训练样本训练决策树分类器模型
Parameters:
x:array-like or sparse matrix, Training input samples; y: array-like, Target values as int or string.
sample_weight:样本权重,默认权重相等
Returns:
self: object 返回对象
Methods:
[python]
- sklearn.tree.export_graphviz #生成决策树的 Graphviz 表示
输出一个 DOT 格式的决策树
Parameters:
decision tree: 决策树分类器,决策树输出到 Graphviz
out_file: file object or string, 输出文件的类型或对象。默认值:“tree.dot”
max_depth: 可选项,int。默认值:default=None。输出的最大深度,如果值是None, 则全部输出。
feature_names: 可选项,list of strings 字符串列表。 默认值:default=None。Names of each of the features.节点名称
Returns:
dot_data: string. String representation of the input tree in GraphViz dot format. Only returned if out_file is None.
登录 | 立即注册