sklearn基于信息熵的决策树算法实践

以餐馆的经营数据为样本,天气,周末,促销,销量。首先将天气分类为好和坏(经验),销量分类为高和低(均值)。然后将因子规整。采用信息熵的决策树模型进行训练。结果导出为dot文件。

采用graphviz,可以查看结果

决策树

另:graphviz的dot在mac os 10.11.6下有bug,会提示一个lib未能加载。

以下为代码:
#-- coding:utf-8 --

In [2]:

1
import pandas as pd

In [3]:

1
filename = '/Users/frontc/book/ppdam/sales_data.xls' # 样本数据文件路径

In [4]:

1
data = pd.read_excel(filename,index_col=u'序号') # 读取数据到dataframe中

In [5]:

1
data[:4] # 查看一下样本数据

Out[5]:

天气 是否周末 是否有促销 销量
序号
1
2
3
4

In [6]:

1
2
3
4
5
# 数据规整
data[data == u'好'] = 1
data[data == u'是'] = 1
data[data == u'高'] = 1
data[data != 1] = -1

In [7]:

1
x = data.iloc[:,:3].as_matrix().astype(int) # 自变量:天气,是否周末,是否有促销

In [8]:

1
y = data.iloc[:,3].as_matrix().astype(int) # 因变量:销量

In [9]:

1
from sklearn.tree import DecisionTreeClassifier as DTC # 导入决策树类

In [10]:

1
dtc = DTC(criterion='entropy') # 初始化决策树模型,采用信息熵模式

In [11]:

1
dtc.fit(x,y) # 训练模型

Out[11]:

1
2
3
4
DecisionTreeClassifier(class_weight=None, criterion='entropy', max_depth=None,
max_features=None, max_leaf_nodes=None, min_samples_leaf=1,
min_samples_split=2, min_weight_fraction_leaf=0.0,
presort=False, random_state=None, splitter='best')

In [12]:

1
2
from sklearn.tree import export_graphviz
from sklearn.externals.six import StringIO # 引入dot相关包

In [16]:

1
2
with open("tree.dot","w") as f:
f = export_graphviz(dtc,feature_names=[u'tq',u'zm',u'cx'],out_file=f)