在机器学习领域,堆叠集成技术是一种常用的、性能优异的方法。它与投票集成技术相似,但在算法中加入了权重分配,存在两层模型:基础模型和元模型。因此,堆叠集成在所有机器学习集成技术中表现最佳。
堆叠集成技术的核心思想
本文将探讨堆叠集成技术,首先介绍这些技术的核心思想,然后是背后的数学原理和不同的工作机制。将开发这些技术的代码,将这些算法应用于数据,并以策略的关键收获作为总结。
投票集成与堆叠集成的关系
如上所述,堆叠集成与投票集成非常相似。在投票集成中,多个机器学习算法执行相同的任务。在这里,在同一数据上训练多个机器学习算法,一旦训练完成,就会从每个模型中获取结果。最终输出是基础模型结果的平均值,如果是回归问题,或者是分类问题中最频繁的类别,其中所有基础模型的结果都将具有相同的权重。
在堆叠集成中,同样的事情也会发生。只是在解释中加入了一个新的模型层。在堆叠集成中,多个机器学习算法被用作基础模型,但这里还有一个进一步的模型层,称为元模型。这个模型将为基础模型分配不同的权重,与投票集成不同,然后执行堆叠集成的预测任务。
堆叠集成的问题
知道,在堆叠集成中,基础模型是在数据集上训练的,使用基础模型在测试数据上的输出作为元模型的训练数据。在这里可以看到,相同的数据被模型多次使用,这意味着基础模型的输出数据已经对整个模型开放,并且再次用于元模型的训练。因此,显然会有过拟合的情况,模型在训练数据上表现得很好,但在未知或测试数据上表现不佳。
在这种情况下,可以通过验证数据来解决这个问题,这意味着不会向基础模型展示数据的一些样本,或者使用特殊的技术,如KNN采样来执行任务。在堆叠集成中,使用K折方法来处理与过拟合相关的问题。
K折方法:堆叠集成
知道,这些集成方法中存在潜在的过拟合,可以使用K折方法来解决这个问题。这种方法也被称为堆叠或经典堆叠。让通过一个例子来理解K折采样。
假设有一个回归数据集,输出列是数值形式。所以在K折采样中,步骤是将数据集分成训练集和测试集。在这里,使用train_test_split模块,数据集可以很容易地被分成训练集和测试集。假设在数据集中进行了80-20的分割。
在第二步中,决定K的值,这是数据等分的值。通常,取K的值为5,这意味着将数据集分成五部分。
在第三步中,将逐个在数据集上训练基础模型;由于有五等分的数据集,将使用四等分作为训练集,最后一个等分将用作测试集。一旦训练完成,将记录所有算法在早期分割上的预测。同样的事情将重复进行,将记录第1、2、3和4个基础模型的输出。
在第四步中,将拥有所有基础模型的预测数据集,将使用该数据作为元模型的训练集。一旦元模型训练完成,现在不会使用训练基础模型的相同数据集。相反,步骤1中的训练数据将用作基础模型的训练集。
堆叠集成:代码示例
from sklearn.ensemble import RandomForestClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.ensemble import StackingClassifier
# 创建估计器列表
estimators = [
('rf', RandomForestClassifier(n_estimators=10, random_state=42)),
('knn', KNeighborsClassifier(n_neighbors=10)),
('gbdt', GradientBoostingClassifier())
]
# 应用堆叠集成
clf = StackingClassifier(
estimators=estimators,
final_estimator=LogisticRegression(),
cv=11
)
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
from sklearn.metrics import accuracy_score
accuracy_score(y_test, y_pred)
- 堆叠是一种知名的集成方法,它使用两层机器学习算法来预测样本。
- 在堆叠中,元模型首先在基础模型的输出上进行训练。
- 堆叠中的基础模型在不同的数据集上训练两次,第一次训练是为了获得验证数据的输出以提供给元模型,第二次训练是为了基础模型本身。