ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

机器学习算法之决策树与随机森林的原理和常用参数

2021-10-02 18:03:00  阅读:204  来源: 互联网

标签:分支 分类器 算法 参数 随机 决策树 森林


综述:随机森林和决策树一样都可用于分类和回归,然而随机森林的模型结果往往优于决策树。 本篇文章主要讲解以上两种ML算法的原理和常用参数。

一、 原理

1.1 决策树

1.1.1决策树释义

决策树是一种非参数的有监督学习方法。本质上是从训练数据集中归纳出一组决策规则,用来解决分类和回 归问题,规则由:根结点、内部结点、叶子结点(标签)组成的树状图来呈现。

1.1.2 决策树算法要解决两个核心问题:

1、如何从数据表中找出最佳节点和最佳分枝?
1)“不纯度”是决策树特征选择的依据,通常用基尼系数或者信息熵(信息增益)来计算,基尼系数的取值在[0,0.5],信息熵的取值在[0,1]
2)我们需要知道:信息熵对不纯度更加敏感,信息熵作为指标时,计算速度缓慢一些,并且决策树生长的更加“精细”。如果有高维度数据和噪声数据,信息熵更容易过拟合,此时我们应选择基尼系数;反之,如果模型拟合程度低,在训练集和测试集上得分都较低时,我们应选择信息熵。
不过也并非绝对,机器学习的参数选择还是应由具体数据而定。
2、如何让决策树停止生长,防止过拟合?
1)限制树的深度;
2)限制在分支后每个子节点的样本量大小;
3)限制每个节点在分支前必须包含的样本量;
4)限制分支是考虑的特征个数:方法比较简单粗暴、有失严谨可能导致决策树学习不足,一般采用PCA等方式来降维;

1.2 随机森林

1.2.1 随机森林释义

随机森林是非常具有代表性的Bagging集成算法,它的所有基评估器都是单棵决策树。其中分类树集成的的一片森林就叫做随机森林分类器,回归树所集成的一片森林就叫做随机森林回归器。Bagging装袋法的核心思想是构建多个相互独立的评估器,然后对其预测进行平均或者多次表决原则来决定集成评估器的结果,袋装法的代表模型就是随机森林。

1.2.2 随机森林一定比单个分类器好么?

1、随机森林(袋装法)的前提是基分类器如何相互独立,如何做到?
1)随机森林自带随机性,生成的树天生不一样,由random_state 来控制,用法与决策树一致,当固定下来时,会控制生产一片固定的森林,而非让一片森林中只有一颗树
2)袋装法的有放回随机抽样来形成不同的训练集,由不同训练集得到的不同的基分类器自然也就不同了。
2、随机森林的结果一定比单个基分类器好么?
在这里插入图片描述

1)图中横轴:单个分类器的错误率;纵轴:随机森林的错误率,
2)图中的直线是森林中的每一颗树都相同,即对应的错误率都相同时的情况;图中的曲线是森林中的每一颗树都不相同,即错误率都不相同时的情况
3)可以从图像上看出,当单个分类器的误差率小于0.5,即准确率大于0.5时,集成的效果是比基分类器要好的。相反,当基分类器的误差率大于0.5,袋装的集成算法就很不理想。所以在使用随机森林之前,一定要检查,用来组成随机森林的单个分类树是否都有至少50%的预测正确率。

二、常用参数

2.1 决策树

2.1.1 分类常用参数

criterion: 确定不纯度的方法,默认值为“gini”,为基尼系数。也可选择:“entropy”
random_state: 用来设置分支中的随机模式的参数,默人为None,可以输入任意数值,让决策树稳定,一直生长同一棵树
splitter: 控制决策树中分支的随机选项,“best”决策树在分支时虽然随机,但是会选择更重要的特征进行分支,“random”决策树在分支时会更加随机
max_depth:  限制树的最大深度,超过设定深度的树枝会被全部剪掉,可从=3开始尝试
min_samples_split:  一个中间节点所需要的最小样本量,默认 = 2,小于该参数的设定值分支不会发生
min_samples_leaf: 分支后每个子节点所需要的最小样本量,默认 = 1,可输入整数或者浮点数,小于该参数的设定值分支不会发生
max_features:在做最佳分支时,考虑的特征个数
min_impurity_decrease: 限制不纯度降低的大小,默认 = 0,若不纯度的降低>= 该参数设定值,则保留,否则决策树不会继续生长
class_weight: 调节样本均衡的参数,可输入字典、“balanced”、“None”

2.1.2 回归常用参数

注: 回归树的常用参数和分类数相同,不同为以下两点:
1、criterion: 衡量分支质量的指标,“mse”、“friedman_mse”、“mae”,常用“mse”,为均方误差,本质是样本真实数据和回归结果的差异,我们希望mse的结果越接近0越好
2、不需要class_weight,因为在回归树种,没有标签分布是否均衡的问题

2.2 随机森林

2.2.1 分类常用参数

n_eatimators: 不影响模型复杂度,大就是好,但是达到一定程度之后,会在某个值的上下波动。该参数太大,会造成大的计算量,我们渴望在训练时间和模型效果之间取得平衡,常常利用交叉验证+循环的方式以较大的循环步长粗略确定范围,在以更精确的步长来进一步锁定最优效果所对应的参数值。
criterion: 确定不纯度的方法,默认值为“gini”,为基尼系数。也可选择:“entropy”
random_state: 随机森林自带随机性的原因,当该参数固定下来时,会控制生产一片固定的森林,而非让一片森林中只有一颗树
bootstrap: 默认为True,代表采用有放回的随机抽样技术
oof_score: 使用袋装法会让会有1-0.632 的比例的数据落出袋外,可以用来做测试集,使用接口oob_score_查看袋外数据上测试的结果
max_depth:  限制树的最大深度,超过设定深度的树枝会被全部剪掉,可从=3开始尝试
min_samples_split:  一个中间节点所需要的最小样本量,默认 = 2,小于该参数的设定值分支不会发生
min_samples_leaf: 分支后每个子节点所需要的最小样本量,默认 = 1,可输入整数或者浮点数,小于该参数的设定值分支不会发生
max_features:在做最佳分支时,考虑的特征个数
min_impurity_decrease: 限制不纯度降低的大小,默认 = 0,若不纯度的降低>= 该参数设定值,则保留,否则决策树不会继续生长

2.2.2 回归常用参数

注:  所有的常用参数全部和随机森林分类器一致。仅有的不同就是回归树与分类树的不同,不纯度的指标,参数Criterion不一致。
criterion: 衡量分支质量的指标,“mse”、“friedman_mse”、“mae”,常用“mse”,为均方误差,本质是样本真实数据和回归结果的差异,我们希望mse的结果越接近0越好

注:学习机器学习算法有一段时间了,喜欢看讲解+实践操练(码一遍)的方式学习,看过不同老师的视频讲解,觉得【菜菜的sklearn】讲的尤其清楚,供大家参考,b站可以搜到。学习的路上一位好的老师很重要,分享出来,希望一同学习的小伙伴可以少走弯路,提升ROI!!哈哈

标签:分支,分类器,算法,参数,随机,决策树,森林
来源: https://blog.csdn.net/bigrediszuicool/article/details/120584903

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有