本文主要是介绍DecisionTreeClassifier重要参数、属性、接口(实现一棵树,随机性参数),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
DecisionTreeClassifier重要参数
1.criterion
要将表格转化成一颗树,决策树需要找出最佳节点和最佳的分枝方法,对分类树来说,衡量这个“最佳”指标“叫做不纯度
#######实现一棵树,随机性参数,导入需要用到的模块库
from sklearn import tree
from sklearn.datasets import load_wine # 自带的各种数据
from sklearn.model_selection import train_test_split
# 2.观察数据的形式
wine = load_wine() # 数据实例化
# 特征列
wine.data
wine.data.shape # 查看结构# 标签列
wine.target
import pandas as pd
pd.concat([pd.DataFrame(wine.data),pd.DataFrame(wine.target)],axis=1) # 将两部分变成一个表
# 3.分训练集和测试集
Xtrain,Xtest,Ytrain,Ytest = train_test_split(wine.data,wine.target,test_size = 0.3) # 百分之三十做测试集,百分之七十做训练集
# 4.建立模型
clf = tree.DecisionTreeClassifier(criterion = 'entropy') # 实例化参数
clf = clf.fit(Xtrain,Ytrain) # 用训练集数据做训练模型
score = clf.score(Xtest,Ytest) # 导入测试集,返回预测准确度accuracy
score # 查看预测准确度############5.画一颗树
import graphviz
feature_name = ['酒精','苹果酸','灰','灰的碱性','镁','总酚','类黄酮','非黄烷类酚类','花青素','颜色强度','色调','od280/od315稀释葡萄酒','脯氨酸']
# 定义决策树要画的树
dot_data = tree.export_graphviz(clf,feature_names = feature_name,class_names = ['琴酒','雪莉','贝尔摩德'],filled = True,rounded = True)
graph = graphviz.Source(dot_data)
graph
# 6.探索决策树
# 特征重要性
clf.feature_importances_[*zip(feature_name,clf.feature_importances_)] # 将定义的特征名与特征值连起来观察
第5步已经生成一棵决策树
2、random_state & splitter
# random_state & splitter
clf = tree.DecisionTreeClassifier(criterion="entropy",random_state=30 # 用来设置分枝中的随机模式的参数
# ,splitter="random" # 用控制决策树中的随机选项,如果加上之后准确率反而降低,可以注掉)
clf = clf.fit(Xtrain, Ytrain)
score = clf.score(Xtest, Ytest)
score
可以得到准确度,然后画出一棵树
import graphviz
dot_data = tree.export_graphviz(clf,feature_names= feature_name,class_names=["琴酒","雪莉","贝尔摩德"],filled=True,rounded=True)
graph = graphviz.Source(dot_data)
graph
此时画出的时,随机性更高,根据对random_state参数的设置,也可以解决每次画出的树都不是同一棵树的问题了。
3、剪枝参数
#我们的树对训练集的拟合程度如何?
score_train = clf.score(Xtrain, Ytrain)
score_train
# 观察一个最优的剪枝参数
import matplotlib.pyplot as plt
test = []
for i in range(10):
clf = tree.DecisionTreeClassifier(criterion="entropy"
,random_state=30 # 输入任意一个整数,都会让树稳定下来
,splitter="random"
,max_depth=3
# ,min_samples_leaf=10 # 用来显示分支之后的叶子节点的最少个数,如果加上之后精度降低,则注掉
,min_samples_split=10 # 一个节点至少含有的节点个数,才允许被分支,如果加上之后精度降低,则注掉
)
clf = clf.fit(Xtrain,Ytrain)
score = clf.score(Xtest,Ytest)
test.append(score)
plt.plot(range(1,11),test,color='red',label ='max_depth')
plt.legend()
plt.show()
## 既达到测试集的拟合程度最高,又达到了节省计算空间
# apply 用来返回每个测试样本所在的叶子节点的索引
clf.apply(Xtest)
# predict 用来返回每个测试样本的分类/回归结果
clf.predict(Xtest)
这篇关于DecisionTreeClassifier重要参数、属性、接口(实现一棵树,随机性参数)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!