决策树sklearn实现(2)

上一篇文章已经讲了决策树的原理:模拟 人决策过程,按因素影响程度 从大到小,依次决策,得出最终结论。也讲了如何判断因素的影响程度的一种方法:信息增益越大,影响程度越大。也大致讲了递归构建决策树的过程,今天我们来使用sklearn实现决策树。

我不建议重复造*,除非当前*无法满足需求。sklearn实现决策树的核心代码就3句:

1.声明决策树模型

model=tree.DecisionTreeClassifier(
                                                         criterion="entropy"  #这里使用entropy的方式,默认是gini
                                                        ,random_state=30   
                                                        ,splitter="random"    #随机划分属性,sklearn里面默认按属性的重要程度划分。
                                                        ,max_depth=5         #层级数,有效解决过拟合的套路之一
                                                        ,min_samples_leaf=10   #同上
                                                        ,min_samples_split=10   #同上
                                                     )

 

2.训练决策树模型

model.fit(x_train,y_train)

3.输入新的数据获取该数据的分类结果

model.predict(data_new)

我们以红酒数据集为例,下图是我们构建完成的决策树:

决策树sklearn实现(2)

 

下面我们来看一下完整的代码实现:

from sklearn import tree;
from sklearn.datasets import load_wine;
from sklearn.model_selection import train_test_split
import pandas as pd;
import graphviz


#导入红酒数据集
wine=load_wine()
wine_df=pd.concat([pd.DataFrame(wine.data),pd.DataFrame(wine.target)],axis=1)
wine_df.head()

#拆分数据集
x_train,x_test,y_train,y_test=train_test_split(wine.data,wine.target,test_size=0.3)
x_train.shape


#声明决策树模型
model=tree.DecisionTreeClassifier(
    criterion="entropy"
    ,random_state=30
    ,splitter="random"
    ,max_depth=5
    ,min_samples_leaf=10
    ,min_samples_split=10
)


#训练模型
model.fit(x_train,y_train)
print("score:",model.score(x_test,y_test))

#验证决策树的分类结果,这里就不构造新数据了,直接用红酒数据的第一个条
wine.data[0]
print(model.predict_proba([wine.data[0]]))
print(model.predict([wine.data[0]]))

#输出决策树
dot_data=tree.export_graphviz(
    model
    ,feature_names=wine.feature_names
    ,class_names=['琴酒','雪莉','贝尔摩德']
    ,filled=True
    ,rounded=True
    ,out_file=None)
graph=graphviz.Source(dot_data)
graph