iT邦幫忙

2023 iThome 鐵人賽

DAY 25
0
AI & Data

紮實的ML機器學習原理~打造你對資料使用sklearn的靈敏度系列 第 25

DAY 25 「堆疊法(Stacking)」模型融合多個基模型的預測結果作為特征輸入來做回歸和分類啦~

  • 分享至 

  • xImage
  •  

應用於任何選擇性能相對獨立模型以確保模型間多樣性~

將多個基模型的預測結果作為特征輸入到一個元模型中,從而得到最終的預測結果,堆疊法可以用於回歸問題和分類問題。
/images/emoticon/emoticon07.gif可以嘗試不同的元模型和基模型組合來進一步優化模型融合的效果~~~

  • 準備數據:將訓練數據分成 K 個折(folds)。
  1. 第一層訓練:對於每個折,使用 K-1 個折訓練 K 個基模型,然後在剩余的一個折上進行預測,得到該折的預測結果。
  2. 第一層預測:對所有折都進行第一層訓練,得到每個樣本的 K 個基模型的預測結果。
  3. 第二層訓練:使用第一層的預測結果作為特征,以及相應的真實標簽,訓練一個元模型(也稱為 blender 或 meta-model)。
  4. 第二層預測:使用第一層的預測結果作為特征輸入到元模型中,得到最終的預測結果。
from sklearn.ensemble import RandomForestClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.ensemble import StackingClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 加載數據
data = load_iris()
X = data.data
y = data.target

# 劃分訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 定義基模型
estimators = [
    ('rf', RandomForestClassifier()),
    ('lr', LogisticRegression()),
    ('svc', SVC(probability=True))
]

# 定義元模型
meta_model = LogisticRegression()

# 創建堆疊模型
stacking_clf = StackingClassifier(estimators=estimators, final_estimator=meta_model)

# 訓練模型
stacking_clf.fit(X_train, y_train)

# 獲取模型的預測結果
y_pred = stacking_clf.predict(X_test)

# 計算準確度
accuracy = accuracy_score(y_test, y_pred)
print(f'堆疊法準確度: {accuracy}')

使用了隨機森林、邏輯回歸和支持向量機三個不同的分類器作為基模型,並將其與一個邏輯回歸模型作為元模型進行堆疊,以計算了模型在測試集上的準確度~


上一篇
DAY 24 「平均法(Averaging)」模型融合來做回歸問題和分類問題啦~
下一篇
DAY 26 「Blending」模型融合類似堆疊法的預測分類結果~
系列文
紮實的ML機器學習原理~打造你對資料使用sklearn的靈敏度30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言