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()
X_train,X_test,Y_train,Y_test = train_test_split(wine.data,wine.target,train_size=0.7,random_state=44)
#这里可以使用信息熵或者gini系数
clf = tree.DecisionTreeClassifier(criterion='entropy')
clf.fit(X_train,Y_train)
score = clf.score(X_test,Y_test)
print("DecisionTreeClassifier Score:",score)
#output:DecisionTreeClassifier Score: 0.9629629629629629
feature_names = ['酒精','苹果酸','灰','灰的碱性','镁','总酚','类黄酮','非黄烷类酚类', '花青素','颜色强度','色调','od280/od315稀释葡萄酒','脯氨酸']
dot_data = tree.export_graphviz(
clf,
#out_file='d:/dt_wine.dot',
feature_names = feature_names,
class_names = ['琴酒','雪莉','贝尔摩德']
,filled=True
,rounded=True
)
#这个会显示中文乱码,需要替换字体
#graph = graphviz.Source(dot_data)
#加了replace后就不会再显示中文乱码
graph = graphviz.Source(dot_data.replace("helvetica","FangSong"))
graph.view()
2.1.1 criterion
为了要将表格转化为一棵树,决策树需要找出最佳节点和最佳的分枝方法,对分类树来说,衡量这个“最佳”的指标
叫做“不纯度”。通常来说,不纯度越低,决策树对训练集的拟合越好。现在使用的决策树算法在分枝方法上的核心
大多是围绕在对某个不纯度相关指标的最优化上。
不纯度基于节点来计算,树中的每个节点都会有一个不纯度,并且子节点的不纯度一定是低于父节点的,也就是
说,在同一棵决策树上,叶子节点的不纯度一定是最低的。
Criterion这个参数正是用来决定不纯度的计算方法的。sklearn提供了两种选择:
1)输入”entropy“,使用信息熵(Entropy)
2)输入”gini“,使用基尼系数(Gini Impurity)
网友评论