集成学习是否是指多个特定分类器的实例,例如决策树分类器;还是指几种分类器的混合,如神经网络、决策树、支持向量机等?
我查看了维基百科关于Bagging
集成学习者的描述。它提到:
Bagging导致了“不稳定过程的改进”(Breiman, 1996),例如,神经网络、分类和回归树,以及线性回归中的子集选择(Breiman, 1994)。
我对这个描述有点困惑。我还查看了MATLAB中集成算法的实现。例如这个:
load fisheririsens = fitensemble(meas,species,'AdaBoostM2',100,'Tree')
meas
和species
是fitensemble
函数的输入。在这个例子中,它使用了类型为Tree
的AdaBoostM2
弱学习器,并且使用了100
个这样的学习器。这个函数的简单实例如何展示集成学习是用来结合不同分类器的,如神经网络、KNN、朴素贝叶斯
?
有谁能解释一下集成学习到底是什么,以及MATLAB在其fitensemble
函数的实现中试图做什么?
回答:
集成学习的基本思想是结合多个模型以提高预测性能。它们被认为是设计在现有学习算法之上的元算法。有几种方法:
-
Bagging(代表Bootstrap Aggregation)生成一组模型,每个模型在数据的随机抽样上进行训练(bootstrap 重抽样:替换抽样N个实例)。这些模型的预测被结合/聚合以通过平均产生最终预测。
-
随机子空间:其思想是随机化学习算法,例如在应用训练算法之前随机选择一组特征(例如,考虑随机森林)。每个模型在投影到随机选择的子空间上的数据上进行训练。然后通过通常的简单多数投票结合模型的输出。
-
Boosting:也建立在投票/平均多个模型的概念上,但它根据模型的表现对模型进行加权。它以迭代方式构建模型,其中新的模型被鼓励成为早期模型误分类的实例的“专家”。如果基础学习算法不太复杂(弱学习器),Boosting效果最好。这个算法有几个变体(AdaBoost、LogitBoost、GentleBoost、LPBoost等)。
-
Stacking:结合多个基础学习器的预测(通常是不同类型的:kNN、ANN、SVM等),不像之前那样使用投票,而是使用元学习器(在基础模型的输出上训练的模型)。因此,基础学习器的预测被作为输入数据输入到下一层的元学习器中,以产生最终预测。
fitensemble
是MATLAB用于构建用于分类和回归的集成学习者的函数。它支持三种方法:bagging、boosting和子空间。你可以选择三种可用的弱学习器:决策树(实际上是决策树桩)、判别分析(线性和二次两种)或k-最近邻分类器。
注意:除了
Subspace
方法外,所有boosting和bagging算法都基于树学习器。子空间可以使用判别分析或k-最近邻学习器。
例如,以下代码使用AdaBoost方法在训练数据集X
及其对应的类别Y
上训练一个由100棵树组成的决策树集成分类器。
ens = fitensemble(X, Y, 'AdaBoostM1', 100, 'Tree')
(M1
部分表示二元分类器,有一个扩展的M2
版本用于多类问题)