数据挖掘之决策树

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

构造决策树的核心问题是在每一步如何选择适当的属性对样本进行拆分。对一个分类问题,从已知类标记的训练样本中学习并构造出决策树是一个自上而下、分而治之的过程。

决策树算法的分类

决策树算法 算法描述
ID3算法 核心是在决策树的各级节点上,使用信息增益方法作为属性的选择标准
C4.5算法

相对于ID3算法,采用信息增益率来选择节点属性。

ID3算法只适用于离散的描述属性;C4.5算法既能够处理离散的描述属性,也可以处理连续的描述属性

CART算法 一种十分有效的非参数分类和回归方法,通过构建树、修剪树、评估树来构建一个二叉树。当终节点是连续变量时,该树为回归树,当终节点是分类变量时,该树为分类树

 

ID3算法的具体流程:

1、对当前样本集合,计算所有属性的信息增益;

2、选择信息增益最大的属性作为测试属性,把测试属性取值相同的样本划为同一个子样本集;

3、若子样本集的类别属性只含有单个属性,则分支为叶子节点,判断其属性值并标上相应的符号,然后返回调用处;否则对子样本集递归调用本算法。

 

举例,数据样本如下:

数据挖掘之决策树_第1张图片

#使用ID3决策树算法预测销量高低
import pandas as pd
import numpy as np
data = pd.read_excel('sales_data.xls',index_col=u'序号')

#数据是类别标签,要转换为数据
data[data==u'好'] = 1
data[data==u'是'] = 1
data[data==u'高'] = 1
data[data!=1] = -1

x = data.iloc[:,:3].as_matrix().astype(int)
y = data.iloc[:,3].as_matrix().astype(int)

from sklearn.tree import DecisionTreeClassifier as DTC
dtc = DTC(criterion='entropy') #建立决策树模型,基于信息熵
dtc.fit(x,y)
dtc.predict(np.array([[1,1,1],[-1,1,-1]]))

#可视化决策树
#导出的结果是dot文件,需要安装Graphviz转换为pdf或png
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)

 

你可能感兴趣的:(数据挖掘)