机器学习基础:可视化方式理解决策树剪枝

简介: 机器学习基础:可视化方式理解决策树剪枝

看了一些市面上的经典教材,感觉决策树剪枝这一部分讲的都特别晦涩,很不好理解。本文以理论白话+具体案例的形式来讲清楚这个重要知识点,打好决策树这个基础,有助于理解之后我们要讲解的随机森林、gbdt、xgboost、lightgbm等模型。


阅读本文前,可以顺便回顾一下前文:机器学习基础:决策树的可视化


剪枝


如果不对决策树设置任何限制,它可以生成一颗非常庞大的树,决策树的树叶节点所覆盖的训练样本都是“纯”的。这样决策树在训练样本上非常精准,但是在测试集上就没那么好了。


层数越多,叶结点越多,分的越细致,对训练数据分的也越深,越容易过拟合,导致对测试数据预测时反而效果差。要解决这个问题就需要对决策树进行「剪枝」


剪枝的方案主流的有两种,一种是预剪枝,一种是后剪枝。


所谓的预剪枝,即是在生成树的时候就对树的生长进行限制,防止过度拟合。比如我们可以限制决策树在训练的时候每个节点的数据只有在达到一定数量的情况下才会进行分裂,否则就成为叶子节点保留。或者我们可以限制数据的比例,当节点中某个类别的占比超过阈值的时候,也可以停止生长。


下面我们重点讲后剪枝,因为CART采用的就是用的这个方法。


CART剪枝算法流程

640.png


CART树采用的是后剪枝方法,即先从训练集生成一颗完整的决策树,然后自底向上地对非叶结点进行考察,若将该结点对应的子树替换为叶结点能带来泛化性能提升,则将该子树替换为叶结点。


李航老师《统计学习方法》中具体介绍了 CART 剪枝算法的步骤流程。


640.png


看起来是不是很复杂?其实核心思想就是对原始的决策时T0,从底部根节点不断向上剪枝,直到根节点为止。在此过程中,就形成了很多子树{T0,T1,...,Tn};然后通过交叉验证法在验证集上对{T0,T1,...,Tn}测试,从中选择最优子树。


怎么度量最优呢?就要先了解一下决策树损失函数:


剪枝前是以 t 为根结点的子树 Tt 的损失函数是:


640.png


C(Tt)为训练数据的预测误差,分类树是用基尼系数度量,回归树是均方差度量。|Tt|是子树T的叶子节点的数量。式中唯一的未知变量是正则化参数 α ,其值越大,就意味着剪枝力度越大。当 α 从 0 慢慢增大到 ∞ 时,最优子树会慢慢从最开始的整体树,一点一点剪枝,直到变成单结点树。对于固定的 α,一定存在损失函数Cα(T)最小的子树,我们称之为最优子树,记为 Tα 。


两种剪枝策略对比


后剪枝决策树通常比预剪枝决策树保留了更多的分支;


后剪枝决策树的欠拟合风险很小,泛化性能往往优于预剪枝决策树;


后剪枝决策树训练时间开销比未剪枝决策树和预剪枝决策树都要大的多。其实,只需掌握后剪枝就行了。


CART决策树剪枝(参数解读)


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)


  • max_depth:限制树的最大深度

决策树多生长一层,对样本量的需求会增加一倍,所以限制树深度能够有效地限制过拟合。在高维度低样本量时非常有效;建议从=3开始尝试。


  • min_samples_leaf:一个节点在分枝后,每个子节点都必须至少包含的训练样本数量

一个节点在分枝后,每个子节点都必须包含至少min_samples_leaf个训练样本,两种取值:(1)整数 (2)浮点型:如果叶节点中含有的样本量变化很大,输入浮点数表示样本量的百分比。如果分支后的子节点不满足参数条件,分枝就不会发生,或者,分枝会朝着满足每个子节点都包含min_samples_leaf个样本的方向去发生。


这个参数可以保证每个叶子的最小尺寸,在回归问题中避免低方差,过拟合的叶子节点出现。搭配max_depth使用,在回归树中可以让模型变得更加平滑;建议从=5开始;对于类别不多的分类问题,=1通常就是最佳选择。


  • min_samples_split:一个节点必须要至少包含的训练样本数量

如果小于这个数量,这个节点才允许被分枝,否则分枝就不会发生。


  • max_features:分枝时考虑的最大特征个数

即在分支时,超过限制个数的特征都会被舍弃。但是在不知道决策树中的各

个特征的重要性的情况下,强行设定这个参数可能会导致模型学习不足。


  • min_impurity_decrease:子父节点信息增益的最小值

信息增益是父节点的信息熵与子节点信息熵之差,信息增益越大,说明这个分支对模型的贡献越大;相反的,如果信息增益非常小,则说明该分支对模型的建立贡献不大。又由于分支需要的计算量又非常大,所以如果信息增益非常小时,我们就选择放弃该分支。


以上便是剪枝常用到的参数了。


实例


如果不对决策树设置任何限制,生成结果如下:


640.png


每个叶子结点gini指数都等于 0 。


iris = load_iris()
clf = tree.DecisionTreeClassifier(random_state=66,min_samples_leaf=15)
clf = clf.fit(iris.data, iris.target)
dot_data = tree.export_graphviz(clf, out_file=None, 
                         feature_names=iris.feature_names,  
                         class_names=iris.target_names,  
                         filled=True, rounded=True,  
                         special_characters=True)  
graph = pydotplus.graph_from_dot_data(dot_data)  
Image(graph.create_png())


设置叶子节点最少样本数min_samples_leaf=15,这个值限制了叶子节点最少的样本数,如果某叶子节点数目小于样本数,则会和兄弟节点一起被剪枝。

640.png


相关文章
|
2月前
|
机器学习/深度学习 存储 算法
决策树和随机森林在机器学习中的应用
在机器学习领域,决策树(Decision Tree)和随机森林(Random Forest)是两种非常流行且强大的分类和回归算法。它们通过模拟人类决策过程,将复杂的数据集分割成易于理解和处理的子集,从而实现对新数据的准确预测。
99 10
|
3月前
|
机器学习/深度学习 数据采集 数据可视化
基于爬虫和机器学习的招聘数据分析与可视化系统,python django框架,前端bootstrap,机器学习有八种带有可视化大屏和后台
本文介绍了一个基于Python Django框架和Bootstrap前端技术,集成了机器学习算法和数据可视化的招聘数据分析与可视化系统,该系统通过爬虫技术获取职位信息,并使用多种机器学习模型进行薪资预测、职位匹配和趋势分析,提供了一个直观的可视化大屏和后台管理系统,以优化招聘策略并提升决策质量。
176 4
|
2月前
|
机器学习/深度学习 数据采集 监控
探索机器学习:从数据到决策
【9月更文挑战第18天】在这篇文章中,我们将一起踏上一段激动人心的旅程,穿越机器学习的世界。我们将探讨如何通过收集和处理数据,利用算法的力量来预测未来的趋势,并做出更加明智的决策。无论你是初学者还是有经验的开发者,这篇文章都将为你提供新的视角和思考方式。
|
2月前
|
机器学习/深度学习 数据可视化 JavaScript
探索机器学习模型的可视化技术
【9月更文挑战第23天】在数据科学中,理解和解释机器学习模型的决策过程是至关重要的。本文将介绍几种流行的可视化工具和库,如TensorBoard、D3.js等,帮助读者更好地理解模型内部工作原理及其预测结果。通过实例演示如何使用这些工具进行模型可视化,增强模型的可解释性。
|
2月前
|
机器学习/深度学习 算法 Python
从菜鸟到大师:一棵决策树如何引领你的Python机器学习之旅
【9月更文挑战第9天】在数据科学领域,机器学习如同璀璨明珠,吸引无数探索者。尤其对于新手而言,纷繁复杂的算法常让人感到迷茫。本文将以决策树为切入点,带您从Python机器学习的新手逐步成长为高手。决策树以其直观易懂的特点成为入门利器。通过构建决策树分类器并应用到鸢尾花数据集上,我们展示了其基本用法及效果。掌握决策树后,还需深入理解其工作原理,调整参数,并探索集成学习方法,最终将所学应用于实际问题解决中,不断提升技能。愿这棵智慧之树助您成为独当一面的大师。
44 3
|
2月前
|
机器学习/深度学习 算法 Python
决策树下的智慧果实:Python机器学习实战,轻松摘取数据洞察的果实
【9月更文挑战第7天】当我们身处数据海洋,如何提炼出有价值的洞察?决策树作为一种直观且强大的机器学习算法,宛如智慧之树,引领我们在繁复的数据中找到答案。通过Python的scikit-learn库,我们可以轻松实现决策树模型,对数据进行分类或回归分析。本教程将带领大家从零开始,通过实际案例掌握决策树的原理与应用,探索数据中的秘密。
47 1
|
3月前
|
机器学习/深度学习 数据采集 数据可视化
基于python 机器学习算法的二手房房价可视化和预测系统
文章介绍了一个基于Python机器学习算法的二手房房价可视化和预测系统,涵盖了爬虫数据采集、数据处理分析、机器学习预测以及Flask Web部署等模块。
108 2
基于python 机器学习算法的二手房房价可视化和预测系统
|
3月前
|
机器学习/深度学习 算法 数据挖掘
【白话机器学习】算法理论+实战之决策树
【白话机器学习】算法理论+实战之决策树
|
3月前
|
机器学习/深度学习 算法 自动驾驶
揭秘机器学习模型的决策之道
【8月更文挑战第22天】本文将深入浅出地探讨机器学习模型如何从数据中学习并做出预测。我们将一起探索模型背后的数学原理,了解它们是如何被训练以及如何对新数据进行预测的。文章旨在为初学者提供一个清晰的机器学习过程概述,并启发读者思考如何在自己的项目中应用这些技术。

热门文章

最新文章