集合学习的框架

使用各种方法,您可以将许多弱学习者的结果融入一个高质量的集合预测因子。这些方法非常遵循相同的语法,因此您可以尝试不同的方法在命令中具有次要更改。

您可以通过使用创建一个组合进行分类fitcensemble或者通过使用回归fitrensemble

要使用分类进行培训fitcensemble,使用此语法。

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

  • y是响应的矢量,与行相同的观察数X

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

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

同样,您可以通过使用来培训融合的集合fitrensemble,它遵循与此相同的语法fitcensemble.有关输入参数和名称-值对参数的详细信息,请参见fitrensemble功能页面。

对于所有分类或非线性回归问题,请按照以下步骤创建合奏:

准备预测数据

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

准备响应数据

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

  • 对于回归合奏,y必须是一个数字向量,其中元素数量相同,作为行的行数X

  • 对于分类集合,y可以是数字矢量,分类矢量,字符数组,字符串阵列,字符向量,或逻辑向量。

    例如,假设您的响应数据按以下顺序包含三个观察:真正的错误的真正的.你可以表达y为:

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

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

    • [真; false;真实](逻辑向量)

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

    • [“真实”,“假”,“真实”](字符串数组)

    • {'true','false','true'}(字符向量的单元格数组)

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

fitcensemblefitrensemble忽略y创建合奏时。此表包含包含缺失条目的方法。

数据类型 缺少条目
数字矢量
分类向量 <未定义>
字符阵列 空间行
字符串数组 <缺失>
字符向量的单元格数组 ''
逻辑向量 (不可能代表)

选择适用的集成聚合方法

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

  • 分为两类:

    • 'adaboostm1'

    • 'logitboost'

    • “GentleBoost”

    • 'robustboost'(需要优化工具箱™)

    • 'lpboost'(需要优化工具箱)

    • '突然船'(需要优化工具箱)

    • 'rusboost'

    • '子空间'

    • '包'

  • 有三个或更多课程的分类:

    • 'adaboostm2'

    • 'lpboost'(需要优化工具箱)

    • '突然船'(需要优化工具箱)

    • 'rusboost'

    • '子空间'

    • '包'

  • 回归:

    • 'lsboost'

    • '包'

各算法的描述请参见合奏算法

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

此表列出了各种算法的特征。在表格标题:

  • 不平衡- 适用于不平衡数据(一个课程比另一类更多的观察)

  • 停止- 算法自我终止

  • 稀疏的- 需要比其他合奏算法更少的弱者

算法 回归 二元分类 多包分类 班级不平衡 停止 稀疏的
× × ×
AdaBoostM1 ×
AdaBoostM2 ×
LogitBoost ×
温博 ×
RobustBoost ×
LPBoost. × × × ×
TotalBoost × × × ×
RUSBoost × × ×
lsboost. ×
子空间 × ×

RobustBoostLPBoost.,TotalBoost需要优化工具箱许可证。尝试TotalBoostLPBoost., 作为TotalBoost可以更健壮。

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

  • 回归-你的选择是lsboost..看集合算法的一般特征升压和装袋之间的主要差异。

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

    数据特征 推荐算法
    许多预测 子空间
    偏斜数据(更多的一个类别的观察) RUSBoost
    标签噪声(一些培训数据有错误的类) RobustBoost
    许多观测 避免LPBoost.TotalBoost
  • 多包分类- 尝试AdaBoostM2首先,经过这些修改:

    数据特征 推荐算法
    许多预测 子空间
    偏斜数据(更多的一个类别的观察) RUSBoost
    许多观测 避免LPBoost.TotalBoost

有关算法的详细信息,请参阅合奏算法

集合算法的一般特征

  • 促进算法通常使用非常浅的树木。这种结构使用相对较少的时间或记忆。然而,为了有效的预测,提升的树木可能需要比包装的树木更多的集成成员。因此,并不总是清楚哪一类算法优越。

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

  • 如果没有额外的交叉验证,可以估计泛化误差。看oobLoss

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

有关个体集合成员的特征的详细信息,请参阅分类算法的特征

设置集合成员数

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

  • 较大的合奏需要更长时间培训并生成预测。

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

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

小费

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

为弱学习者做好准备

目前弱的学习者类型是:

  • '判别'(推荐子空间合奏)

  • 'knn'(只为子空间合奏)

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

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

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

    ens = fitcensemble(x,y,'方法','子空间',...'numlarningcycles',50,'学习者','knn');%或ens = fitrensemble(x,y,'方法','bag',...'numlarningcycles',50,'学习者','树');
  • 要创建具有非默认弱学习者选项的集成,请使用适当的工具创建一个非默认弱学习者模板方法。

    例如,如果您有缺少数据,并且希望使用具有代理分割的分类树以获得更好的准确性:

    templ = templatetree('代理','全部');ens = fitcensemble(x,y,'方法','adaboostm2',...'numlarningcycles',50,'学习者,templ);

    使树木的叶子包含至少是样本量10%的观察值:

    templ = templatetree('minleafsize',size(x,1)/ 10);ens = fitcensemble(x,y,'方法','adaboostm2',...'numlarningcycles',50,'学习者,templ);

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

    templ = templatetree('maxnumsplits',4);ens = fitcensemble(x,y,'方法','adaboostm2',...'numlarningcycles',50,'学习者,templ);

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

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

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

决策树可以处理X.这样的值被称为“缺失值”。如果在一行中有一些缺失的值X,决策树仅使用非贴材值查找最佳分割。如果整行包括fitcensemblefitrensemble忽略那行。如果您有具有大部分缺失值的数据X,使用代理决策分裂。有关替代分裂的例子,请参阅处理分类集合中的不平衡数据或不平等的错误分类成本代理分裂

树弱学习者的常用设置

  • 弱学员树的深度对训练时间,内存使用和预测精度进行了差异。您控制这些参数的深度:

    • maxnumsplits.—分支节点分裂的最大次数为maxnumsplits.每棵树。设置大值maxnumsplits.得到深刻的树木。袋装的默认是尺寸(x,1) - 1.默认助推是1

    • MinLeafSize- 每个叶子至少有MinLeafSize观察。设置较小的值MinLeafSize得到深刻的树木。分类的默认是15.为了回归。

    • 蛋白化—树中的每个分支节点至少有蛋白化观察。设置较小的值蛋白化得到深刻的树木。分类的默认是210为了回归。

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

    MinParent = max (MinParent 2 * MinLeaf)

    如果还提供maxnumsplits.然后,软件拆分一棵树,直到满足三个拆分标准之一。

  • 代理-使用代理劈叉生长决策树代理'在'.当数据缺少值时,使用替代拆分。

    笔记

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

  • 预测互联-fitcensemblefitrensemble,treebagger使用标准的CART算法种植树木[11]默认情况下。如果预测器变量是异构的,或者存在具有许多级别的预测器,则标准推车倾向于选择具有多个级别的预测器作为分离预测器。对于拆分预测器选择,这对预测器具有预测器具有的级别,请考虑指定'曲率''互动曲率'.这些规范分别对每个预测器和响应或每对预测器和响应之间的关联进行卡方检验。产生最小值的预测器P.-value是特定节点的分割预测器。有关详细信息,请参见选择分裂预测器选择技术

    笔记

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

调用fitcensemblefitrensemble

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

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

  • y是响应,与行相同数量的观察X

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

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

在哪里设置名称值对

您可以传递几个名称-值对fitcensemblefitrensemble,几个适用于弱学习者(模板异教徒templateKNN,templateTree)。要确定哪个名称值对参数是合适的,所以合奏或弱学习者:

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

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

例如,对于带有比默认的每棵树更深的升级分类树的集合,请设置templateTree名称值对参数MinLeafSize蛋白化到较小的值而不是默认值。要么,maxnumsplits.更改为比默认值大的值。然后树木的叶子变长(更深)。

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

也可以看看

|||||||

相关的话题