框架集成学习

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

您可以通过创建分类的合奏fitcensemble或用于通过使用回归fitrensemble

训练一套用于分类的系统fitcensemble,请使用此语法。

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

  • ÿ响应的矢量,与行数相同吗X

  • 名称,值使用一个或多个名称-值对参数指定其他选项。属性指定集成聚合方法'方法'说法,与集成学习循环的数量'NumLearningCycles'论证型和学习者型比较弱“学习者”论据。对于名称 - 值对参数的完整列表,请参阅fitcensemble功能页面。

本图显示了信息,你需要创建一个分类集成。

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

对于所有分类或非线性回归问题,请按照下列步骤来创建一个集合:

准备预测数据

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

准备响应数据

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

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

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

    例如,假设你的响应数据由三个观测数据组成,其顺序如下:真正真正。你可以表达ÿ如:

    • [1; 0; 1](数字向量)

    • 分类({ '真', '假', '真实'})(分类矢量)

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

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

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

    • { '真', '假', '真'}(字符向量的单元阵列)

    无论使用何种数据类型是最方便的。因为你不能用逻辑条目代表缺失值,当你已经在遗漏值不使用逻辑项ÿ

fitcensemblefitrensemble忽略遗漏值ÿ当创建合奏。此表包含其中包括缺少项的方法。

数据类型 失踪的条目
数字矢量 为NaN
分类矢量 <未定义>
字符数组 排空间
字符串数组 <失踪>要么“”
字符向量的单元阵列 “”
逻辑向量 (无法代表)

选择一个适用合奏聚合方法

来创建分类和回归集合fitcensemblefitrensemble分别选择从该列表中适当的算法。

  • 对于两类分类:

    • 'AdaBoostM1'

    • “LogitBoost”

    • 'GentleBoost'

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

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

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

    • “RUSBoost”

    • “子”

    • “包”

  • 对于有三个或更多的类分类:

    • 'AdaBoostM2'

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

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

    • “RUSBoost”

    • “子”

    • “包”

  • 对于回归:

    • 'LSBoost'

    • “包”

对于各种算法的描述,请参阅整体算法

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

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

  • 不平衡- 适合不平衡数据(一个班有许多比对方多观察)

  • 停止——算法self-terminates

  • - 需要弱学习比其他乐团较少的算法

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

RobustBoostLPBoostTotalBoost需要一个优化工具箱许可证。试一试TotalBoost之前LPBoost作为TotalBoost可以更稳健。

建议选择合适的集成算法

  • 回归- 您的选择是LSBoost要么。看到集成算法的一般特点关于增压和装袋的主要区别。

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

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

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

对于这些算法的详细信息,请参阅整体算法

集成算法的一般特点

  • 促进算法一般使用很浅的树木。该建筑使用相对少的时间或内存。然而,对于有效预测,提高树木可能需要更多的集合成员比袋装的树木。因此,它并不总是很清楚其中的算法类是优越的。

  • 一般构造深度的树。这种结构既耗费时间和内存密集型。这也导致相对较慢的预测。

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

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

有关单个团员的特征的详细信息,请参阅分类算法的特点

设置乐团成员的数量

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

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

  • 一些合奏算法可以成为训练过度(不准确),当过大。

要设置合适的大小,可以考虑先从几十到几百个成员合奏,培养合奏,然后检查合奏质量,如测试合奏质量。如果您需要更多成员,请使用恢复方法(分类)或恢复方法(回归)。重复这一步骤,直到增加更多成员并不能提高整体质量为止。

小费

对于分类,LPBoostTotalBoost算法是自终止,这意味着你不必追究相应的集成规模。尝试设置NumLearningCycles500。该算法通常用更少的成员终止。

准备弱学习

目前弱学习类型有:

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

  • 'KNN'(只为子空间乐团)

  • '树'(对于任何合奏除子空间

有两种方法来设置合奏弱学习类型。

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

    ENS = fitcensemble(X,Y, '方法', '子空间',... 'NumLearningCycles',50 '学习者', 'KNN');%或ENS = fitrensemble(X,Y, '方法', '包',...... '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学习者模板单元阵列,最常见的用法是给只有一个弱学习模板。

有关使用模板的示例,请参见在处理合奏分类不平衡数据或不等误分类损失代孕拆分

决策树可以处理为NaN价值观X。这些值被称为“失踪”。如果你有一排一些遗漏值X,决策树只使用非缺失值找到最优分割。如果整个行由为NaNfitcensemblefitrensemble忽略该行。如果你的数据在很大一部分的缺失值X使用代理决定拆分。对于替代拆分的示例,请参阅在处理合奏分类不平衡数据或不等误分类损失代孕拆分

对于树弱学习通用设置

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

    • MaxNumSplits- 分支节点分裂的最大数是MaxNumSplits每棵树。设置较大的值MaxNumSplits深入树木。套袋默认为尺寸(X,1) - 1。为提高默认为1

    • MinLeafSize-每片叶子都至少有MinLeafSize观察结果。的设定值小MinLeafSize深入树木。分类的默认值是1回归。

    • MinParentSize- 树中的每个分支节点至少有MinParentSize观察结果。的设定值小MinParentSize深入树木。分类的默认值是210回归。

    如果您同时提供MinParentSizeMinLeafSize,学习者使用,让大叶(浅树)的设置:

    MinParent = MAX(MinParent,2 * MinLeaf)

    如果另外提供MaxNumSplits,然后直到三个分裂条件之一满足软件拆分的树。

  • 代孕- 成长与代孕分割时决策树代孕'上'。当数据缺少值时,使用代理分割。

    注意

    代孕拆分导致更慢的培训和使用更多的内存。

  • PredictorSelection-fitcensemblefitrensembleTreeBagger使用标准的CART算法种树[11]默认。如果预测变量是异质的或存在具有多层次的预测和其它有几级,那么标准CART倾向于选择具有多层次的分裂预测预测。对于拆分预测值选择是稳健的级别数的预测因子,考虑指定“曲率”要么“交互曲率”。这些规范分别进行每个预测和响应对或每对预测的和响应,之间的关联的卡方检验。能产生最小的预测p- 值是分割预测用于特定节点。有关详细信息,请参阅选择拆分预测值选择技术

    注意

    不建议在提高决策树,选择使用弯曲或交互测试分裂的预测。

呼叫fitcensemble要么fitrensemble

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

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

  • ÿ是应答,在相同数量的观测为行X

  • 名称,值使用一个或多个名称-值对参数指定其他选项。属性指定集成聚合方法'方法'说法,与集成学习循环的数量'NumLearningCycles'论证型和学习者型比较弱“学习者”论据。对于名称 - 值对参数的完整列表,请参阅fitrensemble功能页面。

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

在哪里设置名称 - 值对

还有,你可以通过几个名称 - 值对fitcensemble要么fitrensemble和一些适用于弱学习(templateDiscriminanttemplateKNNtemplateTree)。以确定哪个名称 - 值对参数是适当的,该合奏或弱学习:

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

  • fitcensemble要么fitrensemble名称-值对参数作为一个整体来控制集成,无论是用于算法还是用于结构。

例如,对于每棵树比默认更深提振分类树的集合,设置templateTree名称-值对的观点MinLeafSizeMinParentSize为比默认值更小的值。要么,MaxNumSplits为比默认值更大的值。树是那么leafier(深)。

来命名分类合奏的预测因子(合奏的结构的一部分),则使用PredictorNames名称 - 值对中fitcensemble

也可以看看

|||||||

相关话题