机器学习 - 堆叠



堆叠,也称为堆叠泛化,是一种机器学习中的集成学习技术,其中多个模型以分层的方式组合在一起以提高预测准确性。该技术涉及在原始训练数据集上训练一组基础模型,然后使用这些基础模型的预测作为元模型的输入,该元模型经过训练以进行最终预测。

堆叠背后的基本思想是通过以弥补其各自弱点的方式组合多个模型来利用多个模型的优势。通过使用一组不同的模型,这些模型做出不同的假设并捕捉数据的不同方面,我们可以提高整体集成预测能力。

堆叠技术可以分为两个阶段:

  • 基础模型训练 - 在此阶段,一组基础模型在原始训练数据上进行训练。这些模型可以是任何类型,例如决策树、随机森林、支持向量机、神经网络或任何其他算法。每个模型都在训练数据的一个子集上进行训练,并为其余数据点生成一组预测。

  • 元模型训练 - 在此阶段,基础模型的预测用作元模型的输入,该元模型在原始训练数据上进行训练。元模型的目标是学习如何组合基础模型的预测以产生更准确的预测。元模型可以是任何类型,例如线性回归、逻辑回归或任何其他算法。元模型使用交叉验证进行训练,以避免过拟合。

一旦元模型经过训练,就可以通过将基础模型的预测作为输入来将其用于对新数据点进行预测。基础模型的预测可以以不同的方式组合,例如取平均值、加权平均值或最大值。

示例

以下是使用 scikit-learn 在 Python 中实现堆叠的示例:

from sklearn.datasets import load_iris
from sklearn.model_selection import cross_val_predict
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier
from mlxtend.classifier import StackingClassifier
from sklearn.metrics import accuracy_score

# Load the iris dataset
iris = load_iris()
X, y = iris.data, iris.target

# Define the base models
rf = RandomForestClassifier(n_estimators=10, random_state=42)
gb = GradientBoostingClassifier(random_state=42)

# Define the meta-model
lr = LogisticRegression()

# Define the stacking classifier
stack = StackingClassifier(classifiers=[rf, gb], meta_classifier=lr)

# Use cross-validation to generate predictions for the meta-model
y_pred = cross_val_predict(stack, X, y, cv=5)

# Evaluate the performance of the stacked model
acc = accuracy_score(y, y_pred)
print(f"Accuracy: {acc}")

在此代码中,我们首先加载鸢尾花数据集并定义基础模型,它们是随机森林和梯度提升分类器。然后,我们定义元模型,它是一个逻辑回归模型。

我们使用基础模型和元模型创建一个 StackingClassifier 对象,并使用交叉验证为元模型生成预测。最后,我们使用准确率评分评估堆叠模型的性能。

输出

执行此代码时,将产生以下输出:

Accuracy: 0.9666666666666667
广告

© . All rights reserved.