主要内容

集成学习框架

使用各种方法,您可以将许多弱学习器的结果融合到一个高质量的集成预测器中。这些方法严格遵循相同的语法,因此您可以尝试不同的方法,只需对命令进行微小的更改。

可以通过使用创建用于分类的集成fitcensemble或者通过使用回归fitrensemble

训练一个集合用于分类fitcensemble,请使用此语法。

ens = fitcensemble(X,Y,名称,值)
  • X是数据的矩阵。每行包含一个观测值,每列包含一个预测变量。

  • Y响应的向量是否与行数相同X

  • 名称,值使用一个或多个名称-值对参数指定其他选项。方法指定集成聚合方法“方法”参数时,集成学习周期的个数“NumLearningCycles”参数,以及弱学习器的类型“学习者”论点。有关名称-值对参数的完整列表,请参见fitcensemble功能页面。

该图显示了创建分类集成所需的信息。

拟合集成所需的输入以创建分类集成

类似地,您可以使用fitrensemble,其语法与fitcensemble.有关输入参数和名-值对参数的详细信息,请参见fitrensemble功能页面。

对于所有分类或非线性回归问题,遵循以下步骤创建集合:

准备预测数据

所有监督学习方法都从预测器数据开始,通常称为X在本文档中。X可以存储在矩阵或表格中。每行X的每一列表示一个观测值X表示一个变量或预测器。

准备响应数据

您可以为响应数据使用各种各样的数据类型。

  • 对于回归集合,Y必须是一个数字向量的元素数量与行的数量相同X

  • 对于分类集合,Y可以是数字向量、分类向量、字符数组、字符串数组、字符向量的单元格数组或逻辑向量。

    例如,假设您的响应数据由以下顺序的三个观察数据组成:真正的真正的.你可以表达Y为:

    • [1, 0, 1](数值向量)

    • 分类({‘真正的’,‘假’,‘真正’})(分类向量)

    • (真的,假的,真的)(逻辑向量)

    • ['真';'假';'真'](字符数组,用空格填充,使每行具有相同的长度)

    • (“真正的”,“假”,“真正的”)(字符串数组)

    • {“真实”,“假”,“真正的”}(字符向量单元格数组)

    使用任何最方便的数据类型。中有缺失值时,由于不能用逻辑项表示缺失值,所以不要使用逻辑项Y

fitcensemble而且fitrensemble忽略中缺失的值Y当创建一个合奏。该表包含包含缺失项的方法。

数据类型 失踪的条目
数值向量
分类向量 <定义>
字符数组 空格行
字符串数组 < >失踪""
字符向量的单元格数组
逻辑向量 (无法表示)

选择一个适用的集成聚合方法

创建分类和回归集成fitcensemble而且fitrensemble,分别从该列表中选择合适的算法。

  • 分为两类:

    • “AdaBoostM1”

    • “LogitBoost”

    • “GentleBoost”

    • “RobustBoost”(需要优化工具箱™)

    • “LPBoost”(需要优化工具箱)

    • “TotalBoost”(需要优化工具箱)

    • “RUSBoost”

    • “子”

    • “包”

  • 按三个或以上类别分类:

    • “AdaBoostM2”

    • “LPBoost”(需要优化工具箱)

    • “TotalBoost”(需要优化工具箱)

    • “RUSBoost”

    • “子”

    • “包”

  • 回归:

    • “LSBoost”

    • “包”

有关各种算法的描述,请参见整体算法

看到选择合适集成算法的建议

该表列出了各种算法的特点。在表标题中:

  • 不平衡-适合不平衡的数据(一个类比另一个类有更多的观察)

  • 停止—算法自动终止

  • 稀疏的-需要比其他集成算法更少的弱学习器

算法 回归 二元分类 多类分类 类不平衡 停止 稀疏的
× × ×
AdaBoostM1 ×
AdaBoostM2 ×
LogitBoost ×
GentleBoost ×
RobustBoost ×
LPBoost × × × ×
TotalBoost × × × ×
RUSBoost × × ×
LSBoost ×
子空间 × ×

RobustBoostLPBoost,TotalBoost需要一个优化工具箱许可证。试一试TotalBoost之前LPBoost,因为TotalBoost可以更健壮。

选择合适集成算法的建议

  • 回归-你的选择是LSBoost.看到集成算法的一般特征对于增强和套袋的主要区别。

  • 二元分类——试着AdaBoostM1首先,通过这些修改:

    数据的特点 推荐算法
    许多预测 子空间
    倾斜的数据(一个类的更多观测数据) RUSBoost
    标签噪声(部分训练数据有错误的类别) RobustBoost
    许多观测 避免LPBoost而且TotalBoost
  • 多类分类——试着AdaBoostM2首先,通过这些修改:

    数据的特点 推荐算法
    许多预测 子空间
    倾斜的数据(一个类的更多观测数据) RUSBoost
    许多观测 避免LPBoost而且TotalBoost

具体算法请参见整体算法

集成算法的一般特征

  • 提高算法通常使用非常浅的树。这种结构使用相对较少的时间或内存。然而,为了有效的预测,增强树可能需要比袋装树更多的整体成员。因此,并不总是清楚哪一类算法更好。

  • 一般建深树。这种构造既耗时又占用内存。这也导致了相对缓慢的预测。

  • 可以估计泛化误差,无需额外的交叉验证。看到oobLoss

  • 除了子空间,所有的boosting和bagging算法都是基于决策树学习者。子空间都可以用判别分析k最近的邻居学习者。

有关个别合奏成员特征的详细信息,请参见分类算法的特点

设置集合成员的数量

选择一个集合的大小涉及到平衡速度和准确性。

  • 更大的集合需要更长的时间来训练和产生预测。

  • 一些集成算法在太大的时候会变得过度训练(不准确)。

要设置一个合适的规模,可以考虑从几十到几百人的合奏开始,训练合奏,然后检查合奏的质量,如测试集成质量.如果需要更多成员,请使用重新开始方法(分类)或重新开始方法(回归)。重复此操作,直到添加更多成员不能提高整体质量为止。

提示

有关分类,请参阅LPBoost而且TotalBoost算法是自我终止的,这意味着您不必研究适当的集成大小。尝试设置NumLearningCycles500.算法通常以较少的成员终止。

为弱学习者做好准备

目前弱学习器类型有:

  • “判别”(推荐子空间乐团)

  • “资讯”(仅供子空间乐团)

  • “树”(适用于任何乐团,除了子空间

在集合中设置弱学习器类型有两种方法。

  • 属性的值,可创建具有默认弱学习器选项的集成“学习者”名称-值对参数作为弱学习器名称的字符向量或字符串标量。例如:

    ens = fitcensemble(X,Y,'方法','子空间',…“NumLearningCycles”,50岁的“学习者”,“资讯”);% or ens = fitrensemble(X,Y,'Method','Bag',…“NumLearningCycles”,50岁的“学习者”,“树”);
  • 若要创建具有非默认弱学习器选项的集成,请使用适当的方法创建非默认弱学习器模板方法。

    例如,如果你有缺失的数据,并且想要使用带有代理分割的分类树来提高准确性:

    templ = templateTree('代理','所有');ens = fitcensemble(X,Y,'Method','AdaBoostM2',…“NumLearningCycles”,50岁的“学习者”,templ);

    要生长的树,其叶子包含至少10%的样本量的观测值:

    templ = templateTree('MinLeafSize',size(X,1)/10);ens = fitcensemble(X,Y,'Method','AdaBoostM2',…“NumLearningCycles”,50岁的“学习者”,templ);

    或者,选择每棵树的最大分裂数:

    templ = templateTree(' maxnumsplitting ',4);ens = fitcensemble(X,Y,'Method','AdaBoostM2',…“NumLearningCycles”,50岁的“学习者”,templ);

    中也可以使用非默认弱学习器fitrensemble

当你能给予fitcensemble而且fitrensemble学习器模板的单元格数组,最常见的用法是只给出一个弱学习器模板。

有关使用模板的示例,请参见处理分类集合中的不平衡数据或不平等错误分类代价而且代理分裂

决策树可以处理X.这样的值被称为“缺失”。如果在一行中缺少一些值X,决策树只使用非缺失值来寻找最佳分割。如果整行包含fitcensemble而且fitrensemble忽略这一行。如果数据中有大量缺失值X,使用代理决策分裂。有关代理分割的示例,请参见处理分类集合中的不平衡数据或不平等错误分类代价而且代理分裂

树弱学习器的通用设置

  • 弱学习树的深度对训练时间、记忆使用和预测准确性有影响。你可以控制这些参数的深度:

    • MaxNumSplits—分支节点分裂的最大个数为MaxNumSplits每棵树。设置较大的值MaxNumSplits去树木深处。打包的默认值是size(X,1) - 1.boost的默认值是1

    • MinLeafSize-每片叶子至少有MinLeafSize观察。设置较小的值MinLeafSize去树木深处。分类的默认值是1而且5回归。

    • MinParentSize—树中每个分支节点至少有MinParentSize观察。设置较小的值MinParentSize去树木深处。分类的默认值是2而且10回归。

    如果两者都提供MinParentSize而且MinLeafSize,学习者使用给出较大叶子(较浅的树)的设置:

    MinParent = max(MinParent,2*MinLeaf)

    如果你额外提供MaxNumSplits,然后软件对树进行拆分,直到满足三个拆分条件中的一个为止。

  • 代理-生长决策树与代理分裂时代理“上”.当数据有缺失值时使用代理分割。

    请注意

    代理分割会导致更慢的训练和使用更多的内存。

  • PredictorSelection- - - - - -fitcensemblefitrensemble,TreeBagger使用标准的CART算法种植树木[11]默认情况下。如果预测变量是异构的,或者有些预测变量有很多层次,有些预测变量有很少层次,那么标准CART倾向于选择有很多层次的预测变量作为分割预测变量。对于分离预测器选择,对于预测器具有的水平数量是稳健的,请考虑指定“弯曲”“interaction-curvature”.这些规范分别对每个预测因子与响应或每对预测因子与响应之间的关联进行卡方检验。产生最小值的预测器p-value是特定节点的分裂预测器。详情请参见选择分裂预测器选择技术

    请注意

    在增强决策树时,不建议使用曲率或交互测试选择分割预测器。

调用fitcensemblefitrensemble

的语法fitcensemble而且fitrensemble都是相同的。为fitrensemble,语法为:

ens = fitrensemble(X,Y,名称,值)
  • X是数据的矩阵。每行包含一个观测值,每列包含一个预测变量。

  • Y响应是否与行数相同X

  • 名称,值使用一个或多个名称-值对参数指定其他选项。方法指定集成聚合方法“方法”参数时,集成学习周期的个数“NumLearningCycles”参数,以及弱学习器的类型“学习者”论点。有关名称-值对参数的完整列表,请参见fitrensemble功能页面。

的结果fitrensemble而且fitcensemble是一个集成对象,适用于对新数据进行预测。有关创建回归集成的基本示例,请参见列车回归集合.有关创建分类集成的基本示例,请参见列车分类汇编

在哪里设置名称-值对

您可以传递给几个名称-值对fitcensemblefitrensemble,以及一些适用于弱学习者的方法(templateDiscriminanttemplateKNN,templateTree).要确定哪个名值对参数是合适的,集成或弱学习器:

  • 使用模板名-值对来控制弱学习器的特征。

  • 使用fitcensemblefitrensemble名称-值对参数用于整体控制集成,无论是用于算法还是用于结构。

例如,对于增强分类树的集合,其中每个树都比默认树深,请设置templateTree名-值对参数MinLeafSize而且MinParentSize到小于默认值的值。或者,MaxNumSplits设置为大于默认值的值。树木的叶子就长得更多(更深)了。

要在分类集成(集成结构的一部分)中命名预测器,请使用PredictorNames名称-值对fitcensemble

另请参阅

|||||||

相关的话题