機器學習 - 堆疊



堆疊,也稱為堆疊泛化,是一種機器學習中的整合學習技術,其中多個模型以分層的方式組合在一起以提高預測準確性。該技術涉及在原始訓練資料集上訓練一組基礎模型,然後使用這些基礎模型的預測作為元模型的輸入,該元模型經過訓練以進行最終預測。

堆疊背後的基本思想是透過以彌補其各自弱點的方式組合多個模型來利用多個模型的優勢。透過使用一組不同的模型,這些模型做出不同的假設並捕捉資料的不同方面,我們可以提高整體整合預測能力。

堆疊技術可以分為兩個階段:

  • 基礎模型訓練 - 在此階段,一組基礎模型在原始訓練資料上進行訓練。這些模型可以是任何型別,例如決策樹、隨機森林、支援向量機、神經網路或任何其他演算法。每個模型都在訓練資料的一個子集上進行訓練,併為其餘資料點生成一組預測。

  • 元模型訓練 - 在此階段,基礎模型的預測用作元模型的輸入,該元模型在原始訓練資料上進行訓練。元模型的目標是學習如何組合基礎模型的預測以產生更準確的預測。元模型可以是任何型別,例如線性迴歸、邏輯迴歸或任何其他演算法。元模型使用交叉驗證進行訓練,以避免過擬合。

一旦元模型經過訓練,就可以透過將基礎模型的預測作為輸入來將其用於對新資料點進行預測。基礎模型的預測可以以不同的方式組合,例如取平均值、加權平均值或最大值。

示例

以下是使用 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
廣告