主要内容

集成学习框架

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

您可以通过使用fitcensemble或使用回归fitrensemble

训练用于分类使用的集合fitcensemble,使用此语法。

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

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

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

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

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

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

准备预测数据

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

准备响应数据

您可以为响应数据使用多种数据类型。

  • 回归的乐团,Y必须是一个数字向量,其元素数与的行数相同X

  • 分类的乐团,Y可以是数字向量、类别向量、字符数组、字符串数组、字符向量单元格数组或逻辑向量。

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

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

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

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

    • (“真正的”,“假”;“真正的”)(字符数组,填充空格,以便每行具有相同的长度)

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

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

    使用最方便的数据类型。因为您不能用逻辑条目来表示丢失的值,所以在中有丢失的值时不要使用逻辑条目Y

fitcensemblefitrensemble忽略Y创建集成时。该表包含包含缺失项的方法。

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

选择适用的集成聚合方法

来创建分类和回归集成fitcensemblefitrensemble,从这个列表中选择合适的算法。

  • 分为两类:

    • “AdaBoostM1”

    • “LogitBoost”

    • “GentleBoost”

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

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

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

    • “RUSBoost”

    • “子”

    • “包”

  • 有三个或以上类别的分类:

    • “AdaBoostM2”

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

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

    • “RUSBoost”

    • “子”

    • “包”

  • 回归:

    • “LSBoost”

    • “包”

各算法的描述请参见整体算法

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

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

  • 不平衡-对不平衡的数据有好处(一个职业比另一个职业有更多的观察)

  • 停止——算法self-terminates

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

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

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

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

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

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

    数据的特点 推荐算法
    许多预测 子空间
    扭曲的数据(一个类的更多观察) RUSBoost
    标签噪音(一些训练数据有错误的类) RobustBoost
    许多观测 避免LPBoostTotalBoost
  • 多类分类——试着AdaBoostM2首先,经过这些修改:

    数据的特点 推荐算法
    许多预测 子空间
    扭曲的数据(一个类的更多观察) RUSBoost
    许多观测 避免LPBoostTotalBoost

具体算法请参见整体算法

集成算法的一般特征

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

  • 一般构造深树。这种构造既耗时又需要大量内存。这也导致了相对缓慢的预测。

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

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

要了解单个合唱团成员的特征,请参见分类算法的特点

设置集合成员数

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

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

  • 一些集成算法在太大时可能会过度训练(不准确)。

要设置适当的大小,可以考虑从一个合奏中几十到几百个成员开始,训练合奏,然后检查合奏质量,如测试整体质量.如果您需要更多的成员,可以使用的简历方法(分类)或的简历方法(回归)。重复,直到增加更多的成员不能提高合奏质量。

提示

分类,LPBoostTotalBoost算法是自终止的,这意味着您不必研究适当的集成大小。尝试设置NumLearningCycles500.算法通常以更少的成员终止。

为弱学习者做好准备

目前较弱的学习者类型有:

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

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

  • “树”(适用于除子空间

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

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

    ens = fitcensemble(X,Y,'Method','Subspace',…)“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,大小(X, 1) / 10);ens = fitcensemble(X,Y,'Method','AdaBoostM2',…“NumLearningCycles”,50岁的“学习者”,templ);

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

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

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

当你可以给予fitcensemblefitrensemble一个单元阵列的学习者模板,最常见的用法是只给一个弱的学习者模板。

有关使用模板的示例,请参见在分类系统中处理不平衡的数据或不相等的误分类成本代理分裂

决策树可以处理X.这样的值被称为“缺失值”。如果在一行中有一些缺失的值X,决策树只使用非缺失值来寻找最优分割。如果一整行由fitcensemblefitrensemble忽略这一行。如果您的数据中有很大一部分缺失值X,使用代理决策分割。有关代理拆分的示例,请参见在分类系统中处理不平衡的数据或不相等的误分类成本代理分裂

树弱学习者的常用设置

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

    • MaxNumSplits—分支节点分裂的最大次数为MaxNumSplits每棵树。设置较大的值MaxNumSplits去挖深树。bagging的默认值是大小(X, 1) - 1.默认助推是1

    • MinLeafSize-每片叶子至少有MinLeafSize观察。设置较小的值MinLeafSize去挖深树。默认的分类是15回归。

    • MinParentSize—树中的每个分支节点至少有MinParentSize观察。设置较小的值MinParentSize去挖深树。默认的分类是210回归。

    如果两者都提供MinParentSizeMinLeafSize,学习者使用的设置,使更大的叶子(较浅的树):

    MinParent = max (MinParent 2 * MinLeaf)

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

  • 代理-使用代理劈叉生长决策树代理“上”.当数据缺少值时,请使用代理分割。

    请注意

    代理分裂导致训练速度变慢,使用更多的记忆。

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

    请注意

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

调用fitcensemblefitrensemble

的语法fitcensemblefitrensemble都是相同的。为fitrensemble,语法为:

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

  • Y这些响应是否具有与行数相同的观察值X

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

的结果fitrensemblefitcensemble是一个集合对象,适合对新数据进行预测。有关创建回归集成的基本示例,请参见火车回归合奏.有关创建分类集成的基本示例,请参见火车分类合奏

在哪里设置名称-值对

您可以传递几个名称-值对fitcensemblefitrensemble,还有一些适用于学习能力差的学生(templateDiscriminanttemplateKNN,templateTree).要确定哪个名称-值对参数是合适的,是集合还是弱学习器:

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

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

例如,对于增强分类树的集合,每个树的深度都大于默认值,则设置templateTree名称-值对的观点MinLeafSizeMinParentSize设置为比默认值小的值。或者,MaxNumSplits更改为比默认值大的值。然后树木的叶子变长(更深)。

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

另请参阅

|||||||

相关的话题