理解集成学习及其在 Matlab 中的实现

Posted

技术标签:

【中文标题】理解集成学习及其在 Matlab 中的实现【英文标题】:Understanding ensemble learning and its implementation in Matlab 【发布时间】:2014-07-11 22:07:30 【问题描述】:

ensemble learning 是特定分类器的许多实例的示例,例如决策树分类器;还是神经网络、决策树、SVM 等分类器的混合?

我在Bagging 上查看了这个wikipedia's 描述,是一个集成学习者。它说:

Bagging 导致“不稳定程序的改进”(Breiman,1996 年),其中包括神经网络、分类和回归树,以及线性回归中的子集选择(Breiman,1994 年)。

我对这个描述有点困惑。我还研究了 MATLAB 的 implementation 的集成算法。比如这个:

load fisheriris
ens = fitensemble(meas,species,'AdaBoostM2',100,'Tree')

measspeciesfitensemble 函数的输入。在此示例中,它使用Tree 类型的AdaBoostM2 弱学习器,并使用其中的100。如何处理此函数的这个简单实例以表明集成学习用于将不同的分类器(例如 Neural Net, KNN, Naive Bayes)组合在一起?

谁能解释一下什么是集成学习以及 MATLAB 在实现fitensemble 函数时试图做什么?

【问题讨论】:

【参考方案1】:

ensemble learning的基本思想是结合多个模型来提高预测性能。它们被认为是元算法,旨在在现有学习算法之上工作。有多种方法:

Bagging(代表 Bootstrap Aggregation)生成一组模型,每个模型都在数据的随机抽样上训练 (bootstrap@ 987654324@:样本 N 个替换实例)。来自这些模型的预测被组合/聚合以使用平均产生最终预测。

Random Subspace:这个想法是随机化学习算法,例如在应用训练算法之前随机选择一个特征子集(例如Random Forest)。每个模型都在投影到随机选择的子空间上的数据上进行训练。然后组合模型的输出,通常通过简单的多数投票。

Boosting:同样建立在投票/平均多个模型的概念之上,但是它根据模型的性能对模型进行加权。它以迭代方式构建模型,鼓励新模型成为早期模型错误分类实例的“专家”。如果基础学习算法不太复杂(弱学习器),则提升效果最好。该算法有多种变体(AdaBoost、LogitBoost、GentleBoost、LPBoost 等)。

Stacking:结合多个基学习器(通常是不同类型:kNN、ANN、SVM 等)的预测,不像以前那样使用投票,而是使用元学习器(经过训练的模型在基本模型的输出上)。因此,基学习器的预测作为输入数据被馈送到下一层的元学习器以产生最终预测。


fitensemble 是一个 MATLAB 函数,用于为分类和回归构建 ensemble learner。它支持三种方法:bagging、boosting 和 subspace。您可以在三种可用的弱学习器之间进行选择:decision tree(decision stump真的)、判别分析(linear 和quadratic)或k-nearest neighbor 分类器。

注意:Subspace方法外,所有boosting和bagging算法均基于tree learners。子空间可以使用discriminant analysis 或k-nearest neighbor 学习者。

例如,以下代码使用适合训练数据集X 和相应类Y 的AdaBoost 方法训练决策树集成 分类器(由100 棵树组成)。

ens = fitensemble(X, Y, 'AdaBoostM1', 100, 'Tree')

M1 部分表示二元分类器,对于多类问题有一个扩展的M2 版本)

【讨论】:

您可以通过浏览stats.SEstats.SE上的问题和答案来了解有关集成方法的更多信息 感谢您的编辑,哈哈,非常感谢。对 ensemble learning 很困惑,学了之后就懒得去修改了。 @JohnAndrews:不是这样。根据docs,它必须是三种支持的类型之一:判别分析、kNN 或决策树。但是,您可以通过传递一个弱学习器模板来自定义它们,您可以在其中设置它们各自的选项(即templateDiscriminanttemplateKNNtemplateTree)。您还可以提供弱学习器模板的单元阵列。 请注意最后一行,M1 是二元分类器,M2 是多类。来源:docs

以上是关于理解集成学习及其在 Matlab 中的实现的主要内容,如果未能解决你的问题,请参考以下文章

MATLAB学习笔记—— 矩阵及其基本运算

集成学习voting Classifier在sklearn中的实现

对xgboost和lightgbm的理解及其调参应该关注的点

系统集成项目管理工程师知识点——按时间线学习和理解项目管理

Adaboost算法和MATLAB实现

集成学习-Boosting 模型深度串讲