当前位置:   article > 正文

sklearn机器学习之分类决策树以及参数设置(红酒数据集)_生成一个红酒数据集 (1)尝试用不同参数的决策树算法进行试验。 (2)尝试用不同参数

生成一个红酒数据集 (1)尝试用不同参数的决策树算法进行试验。 (2)尝试用不同参数

在学习完吴恩达老师的机器学习教程后,开始在B站学习菜菜的sklearn机器学习视频。

1.导入相应包以及红酒数据集

from sklearn import tree
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
  • 1
  • 2
  • 3

2.查看红酒数据集中的数据

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

3.分训练集以及测试集

#这里采用sklearn中自带的划分训练集和测试集的方法进行分割,设置测试集站总样本比例为0.3
Xtrain, Xtest, Ytrain, Ytest = train_test_split(wine.data, wine.target, test_size=0.3)
  • 1
  • 2

4.建立模型

#建立决策树模型并进行打分
clf = tree.DecisionTreeClassifier(criterion='entropy')
clf = clf.fit(Xtrain, Ytrain)
score = clf.score(Xtest, Ytest)
score
  • 1
  • 2
  • 3
  • 4
  • 5

5.利用graphviz库画出决策树

#设置特征名
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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

6.探索决策树

#输出特征的重要程度
clf.feature_importances_
#将特征和特征重要程度组合在一起
[*zip(feature_name, clf.feature_importances_)]
  • 1
  • 2
  • 3
  • 4

7.参数设置调整

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

8.调参优化

这里采用穷举法确定最佳参数并用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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

总结

本次基于红酒数据集的决策树构建过程就到这里,欢迎小伙伴和我一起交流!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/748769
推荐阅读
相关标签
  

闽ICP备14008679号