机器学习-决策树

1. 决策树模型
  • 两种:分类树(较多),回归树
  • 树模型通过递归式切割的方法来寻找最佳分类标准,进而最终形成规则
  • 分类决策树模型表示一种基于特征对实例进行分类的树形结构(包括二叉树和多叉树)。
    • 决策树由节点(node)和有向边(directed edge)组成,树中包含三种节点:
      • 根节点(root node):包含样本全集。没有入边,但有零条或多条出边;
      • 内部节点(internal node):对应于属性测试条件,恰有一条入边,和两条或多条出边;
      • 叶节点(leaf node)或终节点(terminal node):对应于决策结果,恰有一条入边,但没有出边。
1)决策树基本流程
  • 从根节点到每个叶子节点的路径对应了一个判定测试序列,其基本流程遵循简单且直观的 "分而治之" 策略

  • 局部区域通过少数几步递归分裂确定,每个决策节点实现一个具有离散输出的属性测试函数,标记分支。

  • 给定训练数据集输入:

    \[D = \{(x_1,y_1),(x_2,y_2),...,(x_n,y_n)\} \]

    在每个节点应用一个测试,并根据测试的输出确定一个分支。这一过程从根节点开始,并递归地重复,直至到达一个叶子节点,这时,该leaf的值形成输出。

2)决策与条件概率分布
  • 决策树可以表示为给定决策节点下类的条件概率分布,这一条件概率分布定义在特征空间的一个划分上。每个将空间划分成较小区域,在从根节点沿一条路径向下时,这些较小的区域被进一步划分,并在每个区域定义一个类的概率分布就构成了一个条件概率分布。

  • 假设 X 是表示特征的随机变量,Y 是表示类的随机变量,则条件概率分布可表示为 P(Y|X)。 X 取值于给定划分条件下的区域的集合,Y 取值于类的集合。各叶节点(区域)上的条件概率往往会偏向某一个类,即属于某一类的概率较大。决策树在分类时会将该节点的实例强行分到条件概率大的那一类去。

    在这里插入图片描述

3) 决策树算法的过程

​ 特征选择 、决策树的生成、决策树的剪枝

4)特征选择:香农熵/信息熵和信息增益
  • 香农熵/信息熵的计算

    • 随着划分过决策树学习的关键在如何选择最优划分属性。一般而言,随着划分过程不断进行,我们希望决策树的分支节点所包含的样本尽可能属于同一类别, 即节点的 "纯度"(purity)越来越高。在分类树中,划分的优劣用不纯度度量(impurity-measure)定量分程不断进行,决策树的分支节点所包含的样本尽可能属于同一类别, 即节点的 "纯度" (purity)越来越高。在分类树中,划分的优劣用不纯度度量(impurity-measure)定量分析

    • 我们可以将任意节点的类分布记作(p0,p1),其中 p1 = 1- p0。选择最佳划分的度量通常是根据划分后叶节点不纯性的程度。不纯度越低,类分布就越倾斜。

      • 类分布(0,1)为的节点具有零不纯性,而均衡分布的(0.5,0.5)的节点具有最高的不纯性。
    • 一种度量不纯性的函数是熵函数(entropy)

      \[Entroy(m) = -\sum_{i=1}^{K}p_m^ilog_2p_m^i \]

      • 例子:

        在这里插入图片描述

    • 不纯性度量方法

      • 熵(Entropy)

        \[\phi(p,p-1) = -plog_2p -(1-p)log_2(1-p) \]

      • 基尼系数(Gini index)

        \[\phi(p,p-1) = 1 -\sum_{i=1}^{m}p_i^2 \]

      • 分类误差(Classification error)

        \[\phi(p,p-1) = 1 -max(p,p-1) \]

  • 信息增益:信息下降最快的方向

    • 决策树最终的优化目标使得叶节点的总不纯度最低,即对应衡量不纯度的指标最低。

    • 局部最优的条件下逐步至尽可能全局最优的结果

    • 局部最优条件:在选取属性测试条件(attribute test condition)对某节点(数据集)进行切分的时候,尽可能选取使得该节点对应的子节点信息熵最小的特征进行切分。换而言之,就是要求父节点信息熵和子节点总信息熵之差要最大

    • 信息增益计算

      \[Gain(D,a) = Ent(D) -\sum_{v=1}^{V}\frac{|D^v|}{|D|}Ent(D^v) \]

      • 离散属性 a 有 V 个可能的取值 a1,a2...av,使用a对样本集 D划分,产生 V 个分支节点
      • 第 V 个分支节点包含了 D 中所有属性 a 上的取值样本为 aV 的样本,记为 DV
    • 决策树归纳算法通常选择最大化增益的测试条件,因为对所有的测试条件来说,Ent(D) 是一个不变的值,所以最大化增益等价于最小化分支节点的不纯性度量的加权平均值。最后,当选择熵作为公式的不
      纯性度量时,熵的差就是所谓的 "信息增益" ,即资讯(information gain)

5)划分数据集

a. 最佳切分函数

  • 划分数据集的最大准则是选择最大信息增益

    b. 按照给定列切分数据集

"""
函数功能:按照给定的列划分数据集
参数说明:
dataSet:原始数据集
axis:指定的列索引
value:指定的属性值
return:redataSet:按照指定列索引和属性值切分后的数据集
"""
def mySplit(dataSet,axis,value):
    col = dataSet.columns[axis]
    redataSet=dataSet.loc[dataSet[col]==value,:].drop(col,axis=1)
	return redataSet

#验证函数:以axis=0,value=1为例
mySplit(dataSet,0,1)

6)决策树的生成

a. 工作原理

  • 得到原始数据集,然后基于最好的属性值划分数据集,由于特征值可能多于两个,因此可能存在大于两个分支的数据集划分。

  • 第一次划分之后,数据集被向下传递到树的分支的下一个节点。

  • 在新的节点上,我们可以再次划分数据,因此我们可以采用递归的原则处理数据集。

    • 递归约束条件是
      • 程序遍历完所有划分数据集的属性
      • 每个分支下的所有实例都具有相同的分类
      • 当前节点包含的样本集合为空,不能划分
    • 在第 2 种情形下,我们把当前节点标记为叶节点,并将其类别设定为该节点所含样本最多的类别,任 何到达叶节点的数据必然属于叶节点的分类;
    • 在第 3 种情形下,同样把当前节点标记为叶节点,但将其类别设定为其父节点所含样本最多的类别

    b. ID3算法:是基础理论较为完善,使用较为广泛的决策树模型

  • 核心:在决策树各个节点应用信息增益准则选择特征,递归地构建决策树

  • 具体方法:

    • 从根节点开始,对节点计算所有可能的特征的信息增益
    • 选择信息增益最大的特征作为节点的特征,由该特征的不同取值建立子节点。
    • 再对子节点调用以上方法,构建决策树。
    • 直到所有特征的信息增益均很小或没有特征可以选择为止,最后得到一颗决策树。
  • 局限:

    • 分支度越高(分类水平越多)的离散变量往往子节点的总信息熵更小,ID3 是按照某一列进行切分, 有一些列的分类可能不会对结果有足够好的指示。极端情况下取 ID 作为切分字段,每个分类的纯度都是 100%,因此这样的分类方式是没有效益的。
    • 不能直接处理连续型变量,若要使用 ID3 处理连续型变量,则首先需要对连续变量进行离散化。
    • 对缺失值较为敏感,使用 ID3 之前需要提前对缺失值进行处理。
    • 没有剪枝的设置,容易导致过拟合,即在训练集上表现很好,测试集上表现很差

    c. C4.5算法:ID3 算法的改进,用信息增益比准则来选择特征。

  • 修改局部最优化条件

    • 信息增益作为划分训练数据集的特征,存在偏向于选择取值较多的特征的问题。
    • 使用信息增益比(information gain ratio)可以对这一问题进行校正。
    • 信息增益比定义
  • 信息增益比定义

    \[Gain\_ration(D,a) = \frac{Gain(D,a)}{IV(a)} \]

    \[IV(a) =- \sum_{v=1}^{V}\frac{|D^v|}{|D|}log_2\frac{|D^v|}{|D|} \]

    • IV(a) 称为属性 a 的 "固有值“(intrinsic value)。
    • 属性 a 的可能取值越多(即 V 越大),则 IV(a) 的值通常会越大。
    • IV 值会随着叶节点上样本量的变小而逐渐变大,也就是说一个特征属性中如果标签分类太多,每个叶子上的 IV 值就会非常大。
    • 值得注意的是,增益率准则对可取值数目较少的属性有所偏好,因此,C4.5 算法并不是直接选择增益率最大的候选划分属性,而是使用了一种启发式:先从候选划分属性中找出信息增益高于平均水平的属性, 再从中选择增益率最高的。
  • 连续变量处理手段

    • 如果输入特征字段是连续型变量,则算法首先会对这一列数进行从小到大的排序,然后选取相邻的两个数的中间数作为切分数据集的备选点,若一个连续 变量有 N 个值,则在 C4.5 的处理过程中将产生 N-1 个备选切分点,并且每个切分点都代表着一种二叉树的切分方案
    • 此时针对连续变量的处理并非是将其转化为一个拥有 N-1 个分类水平的分类变量,而是将其转化成了 N-1 个二分方案,而在进行下一次的切分过程中,这 N-1 个方案都要单独带入考虑,其中每一个切分方案和一个离散变量的地位均相同(一个离散变量就是一个单独的多路切分方案)。
7)决策树的拟合度优化

a. 决策树剪枝——防止过拟合

  • 预剪枝:在决策树生成的过程中,对每个节点在划分前先进行估计,如果当前的节点划分不能带来决策树泛化性能(预测性能)的提升,则停止划分并且将当前节点标记为叶节点。

  • 后剪枝:先训练生成一颗完整的树,自底向上对非叶节点进行考察,如果将该节点对应的子树替换为叶节点能带来决策树泛化能力的提升,则将该子树替换为叶节点。

    \ 预剪枝 后剪枝
    分支树 很多分支没有展开 保留了更多的分支
    拟合风险 降低过拟合风险,但是基于”贪心“算法的本质禁止后续分支展开,带来了欠拟合风险 先生成决策树,自下而上逐一考察,欠拟合风险小,泛化能力更强
    时间开销 训练开销和测试开销小 训练开销大很多

    b. CART 算法:

  • 分类回归树(Classification and Regression Tree)

    • 分裂过程是一个二叉递归划分过程
    • CART 预测变量 x 的类型既可以是连续型变量也可以是分类型变量
    • 数据应以其原始形式处理,不需要离散化
    • 用于数值型预测时,并没有使用回归,而是基于到达叶节点的案例的平均值做出预测
  • 分裂准则:二叉递归划分:条件成立向左,反之向右

    • 对于连续变量:条件是属性小于等于最优分裂点
    • 对于分类变量:条件是属性属于若干类
  • 二叉分裂的优点
    相比多路分裂导致数据碎片化的速度慢,允许在一个属性上重复分裂,即可以在一个属性上产生足够多的分裂。两路分裂带来的树预测性能提升足以弥补其相应的树易读性损失。
    对于属性不同的被预测变量 y 分裂准则不同:

    • 分类树:Gini 准则。与之前的信息增益很类似,Gini 系数度量一个节点的不纯度。
    • 回归树:一种常见的分割标准是标准偏差减少(Standard Deviation Reduction, SDR),类似于
      最小均方误差 LS(least squares,预测错误的平方和)准则。
  • 利用测试集进行剪枝
    简单讨论 CART 算法剪枝过程,该过程也是测试集用于修正模型的最佳体现。例如,有如下在训练集中训练得到的树模型,黑色数字表示训练集上的分类情况,红色数字表示模型作用于验证集上的分类情况。

在这里插入图片描述

  • CART 算法利用验证集剪枝的过程如下:

    • 节点 4 的错误率 e(4) = 1/3
    • 节点 5 的错误率 e(5) = 1
    • 节点 6 的错误率 e(6) = 1
    • 节点 7 的错误率为 e(7) = 4/9

    c. 测试集和验证集

  • 训练集、测试集和验证集的划分通常遵照 6:2:2 的比例进行划分

  • 当然也可根据实际需求适当调整划分比例,但无论如何,测试集和验证集数据数量都不宜过多也不宜过少,该二者数据集数据均不参与建模, 若占比太多,则会对模型构建过程造成较大影响(欠拟合),而若划分数据过少,训练集数据量较大, 则又有可能造成过拟合,数据集的划分也是影响拟合度的重要因素。

2. sklearn实现决策树
from sklearn.tree import DecisionTreeClassifier
clf = DecisionTreeClassifier(criterion = 'gini') # 生成决策树分类器 
clf = clf.fit(Xtrain,Ytrain)
clf.score(Xtest,Ytest)
1)决策树的属性
  • clf.feature_importances_

    显示每个特征重要性——降维,去除重要度为0的特征

    [*zip(feature_name, clf.feature_importances_)]
    
  • clf.apply:返回每个预测样本的叶子索引

  • clf.tree.node_count:树的节点个数

  • _clf.tree.feature:每个节点对应的属性索引值,-2 表示叶节点:

2)防止过拟合

a. 预剪枝

  • random_state

  • splitter

    splitter 也是用来控制决策树中的随机选项的,有两种输入值:

    • 输入”best",决策树在分支时虽然随机,但是还是会优先选择更重要的特征进行分支(重要性可以通过属性feature_importances_查看);
    • 输入“random",决策树在分支时会更加随机,树会因为含有更多的不必要信息而更深更大,并因这些不必要信息而降低对训练集的拟合。

b. 后剪枝

  • max_depth
    • 限制树的最大深度,超过设定深度的树枝全部剪掉,一般用作树的”精修“这是用得最广泛的剪枝参数,在高维度低样本量时非常有效。决策树多生长一层,对样本量的需求会增加一倍,所以限制树深度能够有效地限制过拟合。在集成算法中也非常实用。
    • 实际使用时,建议从=3 开始尝试,看看拟合的效果再决定是否增加设定深度。
  • min_samples_leaf
    • 一个节点在分支后的每个子节点都必须包含至少 min_samples_leaf 个训练样本,否则分支就不会发
      生, 或者,分支会朝着满足每个子节点都包min_samples_leaf 个样本的方向去发生。
    • 一般搭配 max_depth 使用,在回归树中有神奇的效果,可以让模型变得更加平滑。这个参数的数量设
      置得太小会引起过拟合,设置得太大就会阻止模型学习数据。
    • 一般来说,建议从=5 开始使用。
    • 如果叶节点中含有的样本量变化很大,建议输入浮点数作为样本量的百分比来使用。同时,这个参数可
      以保证每个叶子的最小尺寸,避免低方差,过拟合的叶子节点出现。
  • min_samples_split
    • 一个节点必须要包含至少 min_samples_split 个训练样本,这个节点才允许被分支,否则分支就不会发
      生。
  • max_features
    • 限制分支时考虑的特征个数,超过限制个数的特征都会被舍弃。 和 max_depth 异曲同
      工, max_features 是用来限制高维度数据的过拟合的剪枝参数,但其方法比较暴力,是直接限制可以
      使用的特征数量而强行使决策树停下的参数,在不知道决策树中的各个特征的重要性的情况下,强行设
      定这个参数可能会导致模型学习不足。
    • 如果希望通过降维的方式防止过拟合,建议使用 PCA,ICA 或者特征选择模块中的降维算法。
  • min_impurity_decrease
    • 限制信息增益的大小,信息增益小于设定数值的分支不会发生。这是在 0.19 版
      本中更新的功能,在 0.19 版本之前时使用 min_impurity_split。
  • 确认最优的剪枝参数
    • 那具体怎么来确定每个参数填写什么值呢?这时候,我们就要使用确定超参数的曲线来进行判断了,继
      续使用我们已经训练好的决策树模型 clf。
    • 超参数的学习曲线,是一条以超参数的取值为横坐标,模型的度量指标为纵坐标的曲线,它是用来衡量
      不同超参数取值下模型的表现的线。在我们建好的决策树里,我们的模型度量指标就是 score。
3)总结
  • 属性是在模型训练之后,能够调用查看的模型的各种性质 。对决策树来说,最重要的feature_importances_,能够查看各个特征对模型的重要性。
  • sklearn 中许多算法的接口都是相似的,比如说我们之前已经用到的 fit 和 score,几乎对每个算法都可
    以使用。除了这两个接口之外,决策树最常用的接口还有 apply 和 predict。
    • apply 中输入测试集返回每个测试样本所在的叶子节点的索引。
    • predict 输入测试集返回每个测试样本的标签。
  • 所有接口中要求输入 Xtrain 和 Xtest 的部分,输入的特征矩阵必须至少是一个二维矩阵。 sklearn 不接受任何一维矩阵作为特征矩阵被输入。如果你的数据的确只有一个特征,那必须用 reshape(-1,1)来给矩阵增维。
  • 分类树 DecisionTreeClassifier 的八个参数,一个属性,四个接口:
    • 八个参数:Criterion();
      • 两个随机性相关的参数(random_state,splitter);
      • 五个剪枝参数 (max_depth, min_samples_split , min_samples_leaf , max_feature ,
        min_impurity_decrease) ;
      • 一个属性:feature_importances_ ;
    • 四个接口:fit,score,apply,predict .
3. 分类模型的评估指标
1)样本不均匀的问题

a. 原因

  • 样本不均衡是指在一组数据集中,标签的一类天生占有很大的比例,但我们有着捕捉出某种特定的分类
    的需求的状况
    • 比如,我们现在要对潜在犯罪者和普通人进行分类,潜在犯罪者占总人口的比例是相当低的,也许只有2%左右,98%的人都是普通人,而我们的目标是要捕获出潜在犯罪者。这样的标签分布会带来许多问题。
  • 首先,分类模型天生会倾向于多数的类,让多数类更容易被判断正确,少数类被牺牲掉。因为对于模型
    而言,样本量越大的标签可以学习的信息越多,算法就会更加依赖于从多数类中学到的信息来进行判
    断。如果我们希望捕获少数类,模型就会失败。
  • 其次,模型评估指标会失去意义。这种分类状况下,即便模型什么也不做,全把所有人都当成不会犯罪
    的人,准确率也能非常高,这使得模型评估指标 accuracy 变得毫无意义,根本无法达到我们的“要识别
    出会犯罪的人”的建模目的。 所以现在,我们首先要让算法意识到数据的标签是不均衡的,通过施加一些
    惩罚或者改变样本本身,来让模型向着捕获少数类的方向建模。

b. 解决方法

  • 我们可以使用上采样下采样来达成这个目的,所用的方法叫做 SMOTE,这种方法通过将少数类的特征
    重新组合,创造出更多的少数类样本。但这些采样方法会增加样本的总数,对于决策树这个样本总是对
    计算速度影响巨大的算法来说,我们完全不想轻易地增加样本数量,所以我们要寻求另一条路:改进我
    们的模型评估指标,使用更加针对于少数类的指标来优化模型。
  • class_weight
    • 在决策树中,存在着调节样本均衡的参数:class_weight 和接口 fit 中可以设定的 sample_weight
    • 在决策树中,参数 class_weight 默认 None,此模式表示假设数据集中的所有标签是均衡的,即自动认为标签的比例是 1:1。所以当样本不均衡的时候,我们可以使用形如 {"标签的值 1":权重 1,"标签的值 2":权重 2} 的字典来输入真实的样本标签比例,来让算法意识到样本是不平衡的。或者使用”balanced“模式
    • 有了权重之后,样本量就不再是单纯地记录数目,而是受输入的权重影响了,因此这时候剪枝,就需要搭配 min_ weight_fraction_leaf 这个基于权重的剪枝参数来使用。
    • 另请注意,基于权重的剪枝参数(例如 min_weight_ fraction_leaf)将比不知道样本权重的标准(比如min_samples_leaf)更少偏向主导类。如果样本是加权的,则使用基于权重的预修剪标准来更容易优化树结构,这确保叶节点至少包含样本权重的总和的一小部分。
2)混淆矩阵

a. 混淆矩阵出现的原因

  • 评估指标的改变:当目标是希望尽量捕获少数类,那准确率这个模型评估逐渐失
    效,所以引入新的模型评估指标:混淆矩阵
  • 混淆矩阵是二分类问题的多维衡量指标体系,在样本不平衡时极其有用。
    • 在混淆矩阵中,我们将少数类认为是正例,多数类认为是负例。
    • 在决策树,随机森林这些分类算法里,即是说少数类是 1,多数类是 0。
    • 在 SVM 里,就是说少数类是 1,多数类是 -1。

b. 例子:少数类是1,多数类是 0

在这里插入图片描述

其中:

  • 行代表预测情况,列则表示实际情况。
  • 预测值为 1,记为 P(Positive)
  • 预测值为 0,记为 N(Negative)
  • 预测值与真实值相同,记为 T(True)
  • 预测值与真实值相反,记为 F(False)

因此矩阵中四个元素分别表示:

  • TP(True Positive): 真实为 1,预测作 1
  • FN(False Negative): 真实为 1,预测作 0
  • FP(False Positive): 真实为 0,预测作 1
  • TN(True Negative): 真实为 0,预测作 0

基于混淆矩阵,我们有一系列不同的模型评估指标,这些评估指标的范围都在[0,1]之间,所有以 11 和 00 为分子的指标都是越接近 1 越好,所以以 01 和 10 为分子的指标都是越接近 0 越好。对于所有的指标, 我们用橙色表示分母,用绿色表示分子,则我们有:

  • 模型效果整体效果:准确率

    在这里插入图片描述

  • 精确度/查准率,表示在所有预测结果为 1 的样例数中,实际为 1 的样例数所占比重。

    • 精确度越低,意味着 01 比重很大,则代表你的模型对多数类 0 误判率越高,误伤了过多的多数类。 为了避免对多数类的误伤,需要追求高精确度。
    • 精确度是” 将多数类判错后所需付出成本的衡量’’。
    • 当每一次将多数类判断错误的成本非常高昂的时候(比如大众召回车辆的例子),我们会追求高精确度

    在这里插入图片描述

  • 召回率 Recall又被称为敏感度(sensitivity),真正率查全率,表示所有真实为 1 的样本中,被我们预测正确的样本所占的比例。

    • 召回率越高,代表我们尽量捕捉出了越多的少数类。
    • 召回率越低,代表我们没有捕捉出足够的少数类。
    • 如果我们希望不计一切代价,找出少数类(比如找出潜在犯罪者的例子),那我们就会追求高召回率,相反如果我们的目标不是尽量捕获少数类,那我们就不需要在意召回率。
    • 召回率和精确度是此消彼长的,两者之间的平衡代表了捕捉少数类的需求和尽量不要误伤多数类的需求的平衡。究竟要偏向于哪一方,取决于我们的业务需求:究竟是误伤多数类的成本更高,还是无法捕捉少数类的代价更高。

    在这里插入图片描述

  • F1 measure: 为了同时兼顾精确度和召回率,两者的调和平均数作为考量两者平衡的综合性指标 F1 measure

    • 两个数之间的调和平均倾向于靠近两个数中比较小的那一个数,因此我们追求尽量高的 F1 measure
    • 能够保证我们的精确度和召回率都比较高。F1 measure 在[0,1]之间分布,越接近 1 越好。

    \[F - measure = \frac{2}{1/Precision+1/Recall} = \frac{2*Precision}{Precision+Recall} \]

  • 假负率:从 Recall 延申出来的另一个评估指标叫做假负率(False Negative Rate),它等于 1 - Recall,用于衡量所有真实为 1 的样本中,被我们错误判断为 0 的,通常用得不多。

\[FNR = \frac{10}{11+10} \]

  • ROC曲线: Receiver Operating Characteristic Curve,其主要的分析方法就是画条特征曲线

    • 该曲线的横坐标为假正率(False Positive Rate, FPR), N 是真实负样本的个数, FP 是 N 个负样本中被分类器器预测为正样本的个数
    • 纵坐标为召回率,真正率(True Positive Rate, TPR)

    c. sklearn中的混淆矩阵

含义
sklearn.metrics.confusion_matrix 混淆矩阵
sklearn.metrics.accuracy_score 准确率
sklearn.metrics.precision_score 精确度
sklearn.metrics.recall_score 召回率
sklearn.metrics.precision_recall_curve 精确度-召回率平衡曲线
sklearn.metrics.f1.score F1 measure
4. 决策树的算法评价
1)优点
  • 易于理解和解释,因为树木可以画出来被看见。
  • 需要很少的数据准备。其他很多算法通常都需要数据规范化,需要创建虚拟变量并删除空值等。但请注意,sklearn 中的决策树模块不支持对缺失值的处理。
  • 使用树的成本(比如说,在预测数据的时候)是用于训练树的数据点的数量的对数,相比于其他算法,这是一个很低的成本。
  • 能够同时处理数字和分类数据,既可以做回归又可以做分类。其他技术通常专门用于分析仅具有一种变量类型的数据集。
  • 即使其假设在某种程度上违反了生成数据的真实模型,也能够表现良好。
2)缺点
  • 使用决策树可能创建过于复杂的树,这些树不能很好地推广数据。这称为过度拟合。修剪,设置 叶节点所需的最小样本数或设置树的最大深度等机制是避免此问题所必需的,而这些参数的整合和调整对 初学者来说会比较晦涩。
  • 决策树可能不稳定,数据中微小的变化可能导致生成完全不同的树,这个问题需要通过集成算法来解决。
  • 决策树的学习是基于贪婪算法,它靠优化局部最优(每个节点的最优)来试图达到整体的最优,但这种做法不能保证返回全局最优决策树。这个问题也可以由集成算法来解决,在随机森林中,特征和样本会在分枝过程中被随机采样。
  • 如果标签中的某些类占主导地位,决策树学习者会创建偏向主导类的树。因此,建议在拟合决策树之前平衡数据集。
posted @ 2023-06-02 17:07  爻一  阅读(56)  评论(0编辑  收藏  举报