利用决策树 ID3 算法进行预测

决策树:

决策树方法在分类、预测、规则提取等领域被广泛应用

决策树是树状结构,它的每一个节点对应着一个分类,非叶节点对应着在某个属性上的划分,根据样本在该属性上的不同取值将其划分城若干个子集。

构造决策树的核心问题是在每一步如何选择适当的属性对样本做拆分。

对一个分类问题,从一直分类标价的训练样本中学习并构造出决策树是一个自上而下,分而治之的过程。

ID3算法:

基于信息熵来选择最佳测试属性。在每个非叶节点选择信息增益最大的属性作为测试属性,使分类后数据集的熵最小,从而得到较小的决策树(树的平均深度较小,从而提高分类效率)。

信息熵越小,信息增益越大,不确定性越小

Note:该算法只能处理离散属性,对于连续性的属性,在分类前需要对其进行离散化

  • ID3算法实现步骤:
  1. 对当前样本集合计算所有属性的信息增益;
  2. 选择信息增益最大的属性作为测试属性,把测试属性取值相同的样本划为同一个子样本集;
  3. 若子样本集的类倍数行只包含单个属性,则分支为椰子节点,判断其属性值并标上相应的符号,然后返回调用处; 否则对子样本集递归调用本算法。


实例:

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)
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 命令行窗口,执行以下语句:

dot -Tpdf tree.dot -o tree.pdf


Scikit_Learn API :

Methods:

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:

fit(X, y[, sample_weight, check_input, …]) Build a decision tree classifier from the training set (X, y).

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:

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.



参考链接:

http://scikit-learn.org/stable/modules/generated/sklearn.tree.export_graphviz.html#sklearn.tree.export_graphviz点击打开链接

http://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeClassifier.html#sklearn.tree.DecisionTreeClassifier


Note: 本文部分理论和示例总结自《Python 数据分析与挖掘实战》。

猜你喜欢

转载自blog.csdn.net/Carolinedy/article/details/80744820