Machine Learning 简明教程

Machine Learning - Stacking

堆叠,它也被称作堆叠泛化,是一种机器学习的集成学习技术,它以分层的方式将多个模型结合在一起以提高预测准确度。这项技术包括在原训练数据集上训练一组基础模型,然后使用这些基础模型的预测作为元模型的输入,这个元模型被训练来做出最终的预测。

堆叠背后的基本想法就是,通过以一种补偿它们各自缺点的方式将多个模型结合在一起,来利用这些模型的优势。通过使用一组提出不同假设并捕捉数据不同方面的模型,我们可以提高集成模型的整体预测能力。

堆叠技术可以分成两步 −

  1. Base Model Training − 在这个步骤中,一组基础模型会在原训练数据上进行训练。这些模型可以是任何类型,例如决策树,随机森林,支持向量机,神经网络,或任何其他算法。每个模型都在训练数据的子集上进行训练,并针对剩余的数据点制作一组预测。

  2. Meta-model Training − 在这个步骤中,基础模型的预测被用作元模型的输入,这个元模型在原训练数据上进行训练。元模型的目标是学习如何将基础模型的预测结合在一起,以做出更准确的预测。元模型可以是任何类型,例如线性回归,逻辑回归或任何其他算法。元模型会使用交叉验证进行训练,以避免过拟合。

训练元模型后,可通过传递基础模型的预测结果作为输入,对新数据点进行预测。基础模型的预测结果可通过不同方式组合,如取平均值、加权平均值或最大值。

Example

以下是使用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}")

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

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

Output

执行此代码时,将生成以下输出 −

Accuracy: 0.9666666666666667