热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

一文读懂sklearn决策树参数详解(python代码)

《老饼讲解机器学习》http:ml.bbbdata.comteach#96目录一.sklearn决策树完整入参设置二.参数解释(一)训练参数(二)模型训练(三)模型训练后方

《老饼讲解机器学习》http://ml.bbbdata.com/teach#96

目录

一. sklearn决策树完整入参设置

 二. 参数解释

(一) 训练参数 

 (二) 模型训练

(三) 模型训练后方法与属性 

三.代码 



一. sklearn决策树完整入参设置

clf = tree.DecisionTreeClassifier(criterion="gini",splitter="best",max_depth=None,min_samples_split=2,min_samples_leaf=1,min_weight_fraction_leaf=0.,max_features=None,random_state=None,max_leaf_nodes=None,min_impurity_decrease=0.,min_impurity_split=None,class_weight=None,presort='deprecated',ccp_alpha=0.0) # sk-learn的决策树模型

 二. 参数解释

(一) 训练参数 


常用参数(因场景不同,以下参数最为常用)
class_weight  :设置各类别样本的权重,默认是各个样本权重一样,都为 1.
ccp_alpha    :剪枝时的alpha系数,需要剪枝时设置该参数,默认值是不会剪枝的。
random_state :需要每次训练都一样时,就需要设置该参数。
criterion      :节点质量评估函数(gini,entropy) (看似常用,实际不常用。)

预防过拟合参数(为防过拟合,可以尝试调整以下参数)
min_samples_leaf      :叶子节点最小样本数。
min_samples_split      :节点分枝最小样本个数
max_depth         :树分枝的最大深度
min_weight_fraction_leaf :叶子节点最小权重和
min_impurity_decrease  :节点分枝最小纯度增长量
max_leaf_nodes       :最大叶子节点数

树的多样性参数(训练弱树常用以下参数):
max_features:特征最大查找个数
splitter      :分枝时变量选择方式

明细解析如下: 

参数名称参数输入要求变量说明详细说明
criteriongini(默认),entropy节点质量评估函数gini为基尼系数,entropy为熵
splitterbest(默认),random分枝时变量选择方式random:随机选择,best:选择最好的变量
max_depth整数,None(默认)树分枝的最大深度为None时,树分枝深度无限制
min_samples_split整数或小数,默认2节点分枝最小样本个数节点样本>=min_samples_split时,允许分枝,如果小于该值,则不再分枝(也可以设为小数,此时当作总样本占比,即min_samples_split=ceil(min_samples_split *总样本数)
min_samples_leaf整数或小数,默认1叶子节点最小样本数左右节点都需要满足>=min_samples_leaf,才会将父节点分枝,如果小于该值,则不再分枝(也可以设为小数,此时当作总样本占比,即min_samples_split=ceil(min_samples_split *总样本数))
min_weight_fraction_leaf小数,默认值0叶子节点最小权重和节点作为叶子节点,样本权重总和必须>=min_weight_fraction_leaf,为0时即无限制。
max_features整数,小数,None(默认),
{"auto", "sqrt", "log2"}
特征最大查找个数先对max_features进行如下转换,统一转换成成整数。
整数:max_features=max_features
auto:max_features=sqrt(n_features)
sqrt:max_features=sqrt(n_features)
log2:max_features=log2rt(n_features)
小数:max_features=int(max_features * n_features)
None:max_features=n_features
如果max_features<特征个数&#xff0c;则会随机抽取max_features个特征&#xff0c;只在这max_features中查找特征进行分裂。
random_state整数&#xff0c;随机数实例&#xff0c;None(默认)训练过程中的随机种子。如果设定为非None值&#xff0c;则每次训练都会是一样的结果。
max_leaf_nodes整数&#xff0c;None(默认)最大叶子节点数。如果为None,则无限制。
min_impurity_decrease小数&#xff0c;默认0.节点分枝最小纯度增长量信息增益
min_impurity_split--已弃用
class_weight字典&#xff08;多输出为字典列表&#xff09;
&#xff0c;balanced&#xff0c;None&#xff08;默认&#xff09;
各类别样本的权重None:样本权重全为1
字典:{0:1,1:2}代表0类的样本权重为1&#xff0c;1类的样本权重为2.&#xff08;多输出时&#xff0c;格式为:[{0:1,1:2},{0:1,1:2}]&#xff09;
balanced:把总权重n_samples均分给各类&#xff0c;各类再均分给各个样本。例&#xff1a;有3个类别&#xff0c;10个样本&#xff0c;则每个类别平均权重为10/3,平均到某个类别的权重就为 (10/3)/类别样本数。公式&#xff1a;class_weight &#61; n_samples / (n_classes * np.bincount(y))。
presort--已弃用
ccp_alpha非负小数&#xff0c;默认0剪枝时的alpha系数默认0时即不剪枝

注&#xff1a;回归树DecisionTreeRegressor的入参与分类树基本相同&#xff0c;不同之处&#xff1a;
1.criterion可选值&#xff1a;mse:默认修士&#xff0c;均方差&#xff0c;mae&#xff1a;平均绝对差&#xff0c;friedman_mse&#xff1a;
2.没有class_weight

 (二) 模型训练

clf.fit(X,y) &#xff1a;模型训练 

(三) 模型训练后方法与属性 


-------------预测与评估---------------------
clf.predict(X)                   &#xff1a;预测X的类别
clf.predict_proba(X)        &#xff1a;预测X属于各类的概率
clf.predict_log_proba(X) &#xff1a;相当于 np.log(clf.predict_proba())
clf.apply(X)                     &#xff1a;返回样本预测节点的索引
clf.score(X,y)                  &#xff1a;返回准确率&#xff0c;即模型预测值与y不同的个数占比(支持样本权重&#xff1a;clf.score(X,y,sample_weight&#61;sample_weight))
clf.decision_path(np.array([0 ,1 ,2 ,1 ]).reshape(1, -1)).todense() : 返回决策路径&#xff1a;格式[ 1 1 0 0 0] &#xff0c;它代表通过了第0&#xff0c;第1个节点。

-----------------剪枝-------------------------
clf.cost_complexity_pruning_path(X, y) &#xff1a;返回 CCP(Cost Complexity Pruning代价复杂度剪枝)法的剪枝路径。
备注&#xff1a; CCP的计算方法请参考文章&#xff1a;《决策树后剪枝&#xff1a;CCP剪枝法》

--------------树信息--------------------------
clf.get_depth()           &#xff1a;返回树的深度
clf.get_n_leaves()      &#xff1a;叶子节点个数
clf.tree_.node_count  &#xff1a;总节点个数

--------------树明细数据--------------------------
左节点编号  :  clf.tree_.children_left  
右节点编号  :  clf.tree_.children_right  
分割的变量  :  clf.tree_.feature   
分割的阈值  :  clf.tree_.threshold
不纯度(gini) :  clf.tree_.impurity
样本个数     :  clf.tree_.n_node_samples  
样本分布     :  clf.tree_.value  
备注&#xff1a;详细解说请参考文章&#xff1a;《决策树训练后的模型数据》

--------------其它--------------------------
clf.feature_importances_  &#xff1a;各个特征的权重。
clf.get_params()                &#xff1a;查看模型的入参设置
如果想获取节点上样本的数据&#xff0c;sklearn不直接提供&#xff0c;但可以借用 clf.apply(X) &#xff0c;把原数据作为输入&#xff0c;间接获得。
备注&#xff1a;特征权重的计算方法&#xff1a;《决策特征权重feature_importances计算方法》


三.代码 

from sklearn.datasets import load_iris
from sklearn import tree#----------------数据准备----------------------------
iris &#61; load_iris() # 加载数据
#---------------模型训练----------------------------------
clf &#61; tree.DecisionTreeClassifier(criterion&#61;"gini",splitter&#61;"best",max_depth&#61;None,min_samples_split&#61;2,min_samples_leaf&#61;1,min_weight_fraction_leaf&#61;0.,max_features&#61;None,random_state&#61;None,max_leaf_nodes&#61;None,min_impurity_decrease&#61;0.,min_impurity_split&#61;None,class_weight&#61;None,presort&#61;&#39;deprecated&#39;,ccp_alpha&#61;0.0) # sk-learn的决策树模型
clf &#61; clf.fit(iris.data, iris.target) # 用数据训练树模型构建()
r &#61; tree.export_text(clf, feature_names&#61;iris[&#39;feature_names&#39;]) #训练好的决策树
#---------------模型预测结果------------------------
text_x &#61; iris.data[[0,1,50,51,100,101], :]
pred_target_prob &#61; clf.predict_proba(text_x) # 预测类别概率
pred_target &#61; clf.predict(text_x) # 预测类别#---------------打印结果---------------------------
print("\n&#61;&#61;&#61;模型&#61;&#61;&#61;&#61;&#61;&#61;")
print(r)
print("\n&#61;&#61;&#61;测试数据&#xff1a;&#61;&#61;&#61;&#61;&#61;")
print(text_x)
print("\n&#61;&#61;&#61;预测所属类别概率&#xff1a;&#61;&#61;&#61;&#61;&#61;")
print(pred_target_prob)
print("\n&#61;&#61;&#61;预测所属类别&#xff1a;&#61;&#61;&#61;&#61;&#61;&#61;")
print(pred_target)


推荐阅读
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
  • 本文介绍了使用哈夫曼树实现文件压缩和解压的方法。首先对数据结构课程设计中的代码进行了分析,包括使用时间调用、常量定义和统计文件中各个字符时相关的结构体。然后讨论了哈夫曼树的实现原理和算法。最后介绍了文件压缩和解压的具体步骤,包括字符统计、构建哈夫曼树、生成编码表、编码和解码过程。通过实例演示了文件压缩和解压的效果。本文的内容对于理解哈夫曼树的实现原理和应用具有一定的参考价值。 ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • 开源Keras Faster RCNN模型介绍及代码结构解析
    本文介绍了开源Keras Faster RCNN模型的环境需求和代码结构,包括FasterRCNN源码解析、RPN与classifier定义、data_generators.py文件的功能以及损失计算。同时提供了该模型的开源地址和安装所需的库。 ... [详细]
  • 1Lock与ReadWriteLock1.1LockpublicinterfaceLock{voidlock();voidlockInterruptibl ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • EzPP 0.2发布,新增YAML布局渲染功能
    EzPP发布了0.2.1版本,新增了YAML布局渲染功能,可以将YAML文件渲染为图片,并且可以复用YAML作为模版,通过传递不同参数生成不同的图片。这个功能可以用于绘制Logo、封面或其他图片,让用户不需要安装或卸载Photoshop。文章还提供了一个入门例子,介绍了使用ezpp的基本渲染方法,以及如何使用canvas、text类元素、自定义字体等。 ... [详细]
author-avatar
傲慢的寒风呼啸_539
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有