决策树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)
我们以红酒数据集为例,下图是我们构建完成的决策树:
下面我们来看一下完整的代码实现:
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