刚刚使用SKLearn学习机器学习进行数据分析,分享一些概念和想法,希望可以大家一起讨论,如果理解或者表达有不准确的地方,请多多指点,不吝赐教,非常感谢~~
本文将继续介绍sklearn的决策树模块的其他参数
涉及到的理论知识,请转至上篇《决策树和随机森林》:https://blog.csdn.net/weixin_42969619/article/details/98853206
涉及到数据集相关操作,请转至《探索sklearn的数据集》:https://blog.csdn.net/weixin_42969619/article/details/99294615
涉及决策树其他参数,请转至《DecisionTreeClassifier的参数criterion 与使用红酒数据集创建一个树)》:https://blog.csdn.net/weixin_42969619/article/details/98884082
- DecisionTreeClassifier及重要参数:
class sklearn.tree.DecisionTreeClassifier (criterion=’gini’, splitter=’best’, max_depth=None,
min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None,
random_state=None, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None,
class_weight=None, presort=False)
- random_state 参数
用来设置分枝中的随机模式的参数,默认值None;
之前已经说过,决策树的生成是非常“随机”的,且维度越高,随机性越大。给 random_state 参数赋值任意整数,都可以使模型在同一个训练集和测试集下稳定。
- 稳定一个树
from sklearn import tree
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
import graphviz
# 数据集实例化,并划分训练集和测试集
# test_size 参数表示:测试集在数据集中的比例
wine = load_wine()
Xtrain, Xtest, Ytrain, Ytest = train_test_split(wine.data,wine.target,test_size=0.3)
clf=tree.DecisionTreeClassifier(criterion="entropy"
, random_state=30
,splitter="random")
clf=clf.fit(Xtrain,Ytrain)
# 画出一棵树
feature_name = ['酒精','苹果酸','灰','灰的碱性','镁','总酚','类黄酮','非黄烷类酚类','花青素','颜色强度','色调','od280/od315稀释葡萄酒','脯氨酸']
dot_data = tree.export_graphviz(clf
,out_file = None
,feature_names= feature_name
,class_names=["琴酒","雪莉","贝尔摩德"]
,filled=True
,rounded=True
)
graph = graphviz.Source(dot_data)
graph
# 查看结果
score=clf.score(Xtest,Ytest)
score
# 查看特征变量的使用情况
[*zip(feature_name,clf.feature_importances_)]
------------------------
# 结果
0.9444444444444444
[('酒精', 0.09675223719525075),
('苹果酸', 0.0),
('灰', 0.0),
('灰的碱性', 0.0),
('镁', 0.051731632744201506),
('总酚', 0.0),
('类黄酮', 0.34045893563278185),
('非黄烷类酚类', 0.0),
('花青素', 0.0),
('颜色强度', 0.0),
('色调', 0.08814246536013912),
('od280/od315稀释葡萄酒', 0.23390394552014476),
('脯氨酸', 0.18901078354748188)]
说明:
确定了random_state 参数,无论运行多少次“建模”,模型都没有改变;但是不同数据赋值给random_state,会有不同结果