赞
踩
在学习完吴恩达老师的机器学习教程后,开始在B站学习菜菜的sklearn机器学习视频。
from sklearn import tree
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
wine = load_wine()
#注意这里是采用jupyter notebook环境,如果直接编写脚本会不输出
wine
wine.data.shape
wine.target
#如果wine是一张表,应该长这样:
import pandas as pd
pd.concat([pd.DataFrame(wine.data),pd.DataFrame(wine.target)],axis=1)
wine.feature_names
wine.target_names
#这里采用sklearn中自带的划分训练集和测试集的方法进行分割,设置测试集站总样本比例为0.3
Xtrain, Xtest, Ytrain, Ytest = train_test_split(wine.data, wine.target, test_size=0.3)
#建立决策树模型并进行打分
clf = tree.DecisionTreeClassifier(criterion='entropy')
clf = clf.fit(Xtrain, Ytrain)
score = clf.score(Xtest, Ytest)
score
#设置特征名
feature_name = ['酒精','苹果酸','灰','灰的碱性','镁','总酚','类黄酮','非黄烷类酚类','花青素','颜色强度','色调','od280/od315稀释葡萄酒','脯氨酸']
import graphviz
dot_data = tree.export_graphviz(clf
,feature_names= feature_name
#类别名
,class_names=["琴酒","雪莉","贝尔摩德"]
,filled=True#决策树颜色
,rounded=True#决策树圆框
,out_file=None
)
graph = graphviz.Source(dot_data)
#这里小编一直报编码错误,无法解决,如有小伙伴知道怎么解决还望告知,谢谢
graph
#输出特征的重要程度
clf.feature_importances_
#将特征和特征重要程度组合在一起
[*zip(feature_name, clf.feature_importances_)]
clf = tree.DecisionTreeClassifier(criterion="entropy" #random_state用来设置分枝中的随机模式的参数,默认None,在高维度时随机性会表现更明显,低维度的数据(比如鸢尾花数据集),随机性几乎不会显现。输入任意整数,会一直长出同一棵树,让模型稳定下来。 ,random_state=30 #splitter也是用来控制决策树中的随机选项的,有两种输入值,输入”best",决策树在分枝时虽然随机,但是还是会优先选择更重要的特征进行分枝(重要性可以通过属性feature_importances_查看),输入“random",决策树在分枝时会更加随机,树会因为含有更多的不必要信息而更深更大,并因这些不必要信息而降低对训练集的拟合。 ,splitter="random" #max_depth限制树的最大深度,超过设定深度的树枝全部剪掉 ,max_depth=4 #min_samples_leaf限定,一个节点在分枝后的每个子节点都必须包含至少min_samples_leaf个训练样本,否则分枝就不会发生 ,min_samples_leaf=10 #min_samples_split限定,一个节点必须要包含至少min_samples_split个训练样本,这个节点才允许被分枝,否则分枝就不会发生 ,min_samples_split=10 #max_features限制分枝时考虑的特征个数,超过限制个数的特征都会被舍弃。 #min_impurity_decrease限制信息增益的大小,信息增益小于设定数值的分枝不会发生。以上两个参数由于用到不多并未设置 ) clf = clf.fit(Xtrain, Ytrain) score = clf.score(Xtest, Ytest) score
这里采用穷举法确定最佳参数并用matplotlib可视化
import matplotlib.pyplot as plt
test = []
for i in range(10):
clf = tree.DecisionTreeClassifier(max_depth=i+1
,criterion="entropy"
,random_state=30
,splitter="random"
)
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()
本次基于红酒数据集的决策树构建过程就到这里,欢迎小伙伴和我一起交流!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。