在下面的實際代碼實現(xiàn)中,第一層使用了多種基學習器,包括隨機森林、XGBoost、LightGBM、梯度提升、AdaBoost和CatBoost,這些模型分別獨立訓練并生成預(yù)測結(jié)果,第二層的元學習器采用線性回歸,通過學習第一層各基學習器的預(yù)測結(jié)果,進一步整合優(yōu)化,生成最終的預(yù)測結(jié)果

SHAP如何解釋Stacking模型?

需要注意的是,SHAP是一種對單一模型進行解釋的工具,它通過分配特征對模型預(yù)測的貢獻值來衡量特征的重要性,所以針對Stacking需要逐層拆解進行分析,可以通過以下兩種方式來解釋Stacking模型:

代碼實現(xiàn)

模型構(gòu)建

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings("ignore")

plt.rcParams['font.family'] = 'Times New Roman'
plt.rcParams['axes.unicode_minus'] = False
df = pd.read_excel('2024-12-7公眾號Python機器學習AI.xlsx')

from sklearn.model_selection import train_test_split, KFold

X = df.drop(['Y'],axis=1)
y = df['Y']

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

from sklearn.ensemble import RandomForestRegressor, GradientBoostingRegressor, AdaBoostRegressor, StackingRegressor
from xgboost import XGBRegressor
from lightgbm import LGBMRegressor
from catboost import CatBoostRegressor
from sklearn.linear_model import LinearRegression

# 定義一級學習器
base_learners = [
("RF", RandomForestRegressor(n_estimators=100, random_state=42)),
("XGB", XGBRegressor(n_estimators=100, random_state=42, verbosity=0)),
("LGBM", LGBMRegressor(n_estimators=100, random_state=42, verbose=-1)),
("GBM", GradientBoostingRegressor(n_estimators=100, random_state=42)),
("AdaBoost", AdaBoostRegressor(n_estimators=100, random_state=42)),
("CatBoost", CatBoostRegressor(n_estimators=100, random_state=42, verbose=0))
]

# 定義二級學習器
meta_model = LinearRegression()

# 創(chuàng)建Stacking回歸器
stacking_regressor = StackingRegressor(estimators=base_learners, final_estimator=meta_model, cv=5)

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

通過訓練多個基學習器(如隨機森林、XGBoost等)和一個線性回歸作為元學習器,構(gòu)建并訓練了一個用于回歸任務(wù)的Stacking集成模型。

基學習器SHAP值計算

針對RF單一模型解釋

shap_dfs['RF']

計算SHAP值,逐一解析Stacking模型中每個基學習器的特征重要性并保存為數(shù)據(jù)框,便于后續(xù)分析,這里只展示了隨機森林的shap值結(jié)果。

RF模型蜂巢圖

plt.figure()
shap.summary_plot(np.array(shap_dfs['RF']), X_test, feature_names=X_test.columns, plot_type="dot", show=False)
plt.savefig("RF summary_plot.pdf", format='pdf',bbox_inches='tight')

RF模型shap特征貢獻圖

plt.figure(figsize=(10, 5), dpi=1200)
shap.summary_plot(np.array(shap_dfs['RF']), X_test, plot_type="bar", show=False)
plt.title('SHAP_numpy Sorted Feature Importance')
plt.tight_layout()
plt.savefig("RF Sorted Feature Importance.pdf", format='pdf',bbox_inches='tight')
plt.show()

繪制基學習器里隨機森林的SHAP蜂巢圖和特征貢獻排序圖,其他基學習器也可用類似方法進行特征重要性分析

繪制完整基學習器蜂巢圖

為Stacking模型中的所有基學習器繪制SHAP特征重要性蜂巢圖,可以發(fā)現(xiàn)每個基學習器的 SHAP 解釋并不相同,正是因為每個基學習器獨立工作并對特征有不同的偏好所導(dǎo)致的

繪制完整基學習器shap特征貢獻圖

為Stacking模型中的所有基學習器繪制SHAP特征貢獻排序圖(柱狀圖),展示每個基學習器特征重要性的平均影響,其它SHAP可視化同樣的道理繪制。

元學習器SHAP值計算

shap_df

計算元學習器的SHAP值,其中輸入特征是各基學習器的預(yù)測結(jié)果,模型僅對這些特征進行解釋以揭示基學習器對最終預(yù)測的貢獻。

元學習器蜂巢圖

plt.figure()
shap.summary_plot(np.array(shap_df), shap_df, feature_names=shap_df.columns, plot_type="dot", show=False)
plt.title("SHAP Contribution Analysis for the Meta-Learner in the Second Layer of Stacking Regressor", fontsize=16, y=1.02)
plt.savefig("SHAP Contribution Analysis for the Meta-Learner in the Second Layer of Stacking Regressor.pdf", format='pdf', bbox_inches='tight')
plt.show()

元學習器hap特征貢獻圖

plt.figure(figsize=(10, 5), dpi=1200)
shap.summary_plot(np.array(shap_df), shap_df, plot_type="bar", show=False)
plt.tight_layout()
plt.title("Bar Plot of SHAP Feature Contributions for the Meta-Learner in Stacking Regressor", fontsize=16, y=1.02)
plt.savefig("Bar Plot of SHAP Feature Contributions for the Meta-Learner in Stacking Regressor.pdf", format='pdf', bbox_inches='tight')
plt.show()

繪制元學習器(第二層 LinearRegression)的SHAP蜂巢圖和特征貢獻排序圖,分別展示各基學習器的預(yù)測值對元學習器最終決策的影響分布和平均重要性。這些可視化結(jié)果揭示了在Stacking 第二層中,不同基學習器對元學習器預(yù)測的貢獻程度,從而幫助了解每個基學習器在整體模型中的相對重要性

元學習器蜂巢圖與特征關(guān)系圖結(jié)合展示

組合shap可視化蜂巢圖和特征貢獻圖,讓復(fù)雜的機器學習模型變得更加透明和易于解釋。

Stacking模型視為整體的“黑箱”解釋

Stacking模型整體shap計算

stacking_shap_df

對Stacking模型進行整體解釋,計算輸入特征對模型預(yù)測輸出的貢獻,僅關(guān)注輸入特征與最終預(yù)測輸出的關(guān)系,當然這里作者只計算了測試集里前100個樣本的shap值,由于模型本身的復(fù)雜性同時計算所有樣本shap值對于時間成本有一定要求

Stacking模型整體蜂巢圖

plt.figure()
shap.summary_plot(np.array(stacking_shap_df), stacking_shap_df, feature_names=stacking_shap_df.columns, plot_type="dot", show=False)
plt.title("Based on the overall feature contribution analysis of SHAP to the stacking model", fontsize=16, y=1.02)
plt.savefig("Based on the overall feature contribution analysis of SHAP to the stacking model.pdf", format='pdf', bbox_inches='tight')
plt.show()

Stacking模型整體特征貢獻圖

plt.figure(figsize=(10, 5), dpi=1200)
shap.summary_plot(np.array(stacking_shap_df), shap_df, plot_type="bar", show=False)
plt.tight_layout()
plt.title("SHAP-based Stacking Model Feature Contribution Histogram Analysis", fontsize=16, y=1.02)
plt.savefig("SHAP-based Stacking Model Feature Contribution Histogram Analysis.pdf", format='pdf', bbox_inches='tight')
plt.show()

使用SHAP分析將Stacking模型視為整體的“黑箱”,可視化輸入特征對最終預(yù)測結(jié)果的整體貢獻關(guān)系生成蜂巢圖 、特征貢獻圖,同樣可以組合shap可視化蜂巢圖和特征貢獻圖,讓復(fù)雜的機器學習模型變得更加透明和易于解釋。

文章轉(zhuǎn)自微信公眾號@Python機器學習AI

熱門推薦
一個賬號試用1000+ API
助力AI無縫鏈接物理世界 · 無需多次注冊
3000+提示詞助力AI大模型
和專業(yè)工程師共享工作效率翻倍的秘密
返回頂部
上一篇
SHAP進階解析:機器學習、深度學習模型解釋保姆級教程
下一篇
整合數(shù)據(jù)分布+擬合線+置信區(qū)間+相關(guān)系數(shù)的皮爾遜相關(guān)可視化
国内精品久久久久影院日本,日本中文字幕视频,99久久精品99999久久,又粗又大又黄又硬又爽毛片
欧美美女黄视频| 日韩视频永久免费| 欧美视频一区二区三区在线观看| 91精品国产免费| 丝袜亚洲精品中文字幕一区| 精品视频全国免费看| 午夜伊人狠狠久久| 欧美精品一二三| 九九**精品视频免费播放| 国产午夜精品一区二区| 成人激情免费电影网址| 一区二区三区久久久| 91麻豆精品国产91久久久久久| 日韩精品国产欧美| 国产欧美日韩久久| 91论坛在线播放| 老司机免费视频一区二区三区| 欧美电影免费观看高清完整版在线| 极品少妇xxxx精品少妇偷拍| 欧美精品一区二区三区四区| av电影一区二区| 青青草成人在线观看| 国产精品欧美精品| 欧美一卡在线观看| 在线亚洲+欧美+日本专区| 国产专区欧美精品| 午夜精品爽啪视频| 亚洲欧洲日本在线| 久久色视频免费观看| 欧美乱妇15p| 色成年激情久久综合| 国产传媒一区在线| 秋霞电影网一区二区| 亚洲色图制服诱惑| 国产亚洲福利社区一区| 欧美精品日韩综合在线| 9i看片成人免费高清| 国产激情一区二区三区| 免费看欧美美女黄的网站| 一区二区在线观看免费视频播放| 久久日韩粉嫩一区二区三区| 91麻豆精品国产91久久久更新时间| 成人不卡免费av| 国产露脸91国语对白| 精品一区在线看| 午夜精品成人在线| 午夜私人影院久久久久| 亚洲成av人片在www色猫咪| 综合av第一页| 亚洲综合999| 亚洲电影视频在线| 亚洲一二三四区| 亚洲亚洲精品在线观看| 亚洲一区二区欧美日韩| 一区二区三区在线视频免费观看| 国产精品夫妻自拍| 亚洲三级在线看| 亚洲国产精品久久人人爱| 亚洲国产日韩a在线播放| 亚洲一区二区欧美日韩| 日韩成人免费看| 久久精品免费看| 国产91色综合久久免费分享| 91视频一区二区三区| 欧美午夜一区二区三区免费大片| 欧美中文字幕一二三区视频| 91精品久久久久久蜜臀| 精品久久久久久久人人人人传媒| 精品日韩成人av| 亚洲同性gay激情无套| 亚洲成人资源网| 精久久久久久久久久久| 91女厕偷拍女厕偷拍高清| 欧美色中文字幕| 国产性色一区二区| 亚洲地区一二三色| 国产成人综合视频| aaa国产一区| 日韩丝袜情趣美女图片| 一区免费观看视频| 日韩电影免费一区| 97久久精品人人澡人人爽| 欧美一级专区免费大片| 国产精品三级电影| 青青草一区二区三区| 91网站最新地址| 久久久久久久久久久久电影 | 久久久久青草大香线综合精品| 国产精品久久久久永久免费观看| 亚洲动漫第一页| av在线一区二区三区| 欧美一区二区在线免费观看| 中文字幕日韩一区二区| 精品一区二区三区在线播放视频| 91视视频在线观看入口直接观看www| 日韩三级中文字幕| 天堂va蜜桃一区二区三区漫画版| 成人少妇影院yyyy| www国产成人| 国内精品久久久久影院色| 欧美午夜电影网| 一区二区三区日韩精品视频| 成人免费福利片| 日本一区二区三区电影| 老司机精品视频一区二区三区| 一本大道久久a久久精品综合| 久久精品亚洲麻豆av一区二区 | 香蕉影视欧美成人| 91国内精品野花午夜精品| 中文字幕日韩欧美一区二区三区| 国内精品久久久久影院薰衣草| 5566中文字幕一区二区电影| 日韩在线一区二区| 7777精品伊人久久久大香线蕉经典版下载| 中文字幕一区日韩精品欧美| www.欧美色图| 亚洲亚洲人成综合网络| 9191成人精品久久| 精品无码三级在线观看视频| 国产三级精品三级在线专区| 成人涩涩免费视频| 亚洲国产精品麻豆| 日韩亚洲欧美在线观看| 国产91在线|亚洲| 亚洲日本免费电影| 欧美日本一区二区三区四区| 日本麻豆一区二区三区视频| 精品福利在线导航| 99麻豆久久久国产精品免费| 亚洲综合小说图片| 精品国产免费久久| 91网站视频在线观看| 日本女优在线视频一区二区 | 欧美电影影音先锋| 国产成人8x视频一区二区| 国产精品成人一区二区三区夜夜夜| av一区二区不卡| 亚洲妇熟xx妇色黄| 国产校园另类小说区| 欧美日韩在线播放一区| 精品亚洲成av人在线观看| 自拍偷自拍亚洲精品播放| 欧美一区二区三区精品| 99r国产精品| 国模一区二区三区白浆| 一区二区三区在线免费| 国产日产欧美一区| 91精品欧美久久久久久动漫 | 成人天堂资源www在线| 日本aⅴ亚洲精品中文乱码| 中文字幕亚洲不卡| 久久久久久久久久看片| 这里是久久伊人| 欧美在线观看18| 91在线porny国产在线看| 国产综合色视频| 五月婷婷久久丁香| 亚洲一区二区欧美日韩| 亚洲精品国产成人久久av盗摄| 久久免费美女视频| 精品久久99ma| 欧美一区二区日韩| 欧美高清视频一二三区 | 久久99久久99小草精品免视看| 一区二区三区不卡在线观看| 国产精品初高中害羞小美女文 | 中文字幕乱码亚洲精品一区| 久久综合给合久久狠狠狠97色69| 91精品蜜臀在线一区尤物| 欧美高清你懂得| 制服丝袜在线91| 日韩精品一区二区三区老鸭窝| 在线播放视频一区| 欧美日高清视频| 91精品国产综合久久久久久久| 欧美日韩一区二区三区在线看| 欧美视频在线观看一区| 91精品国产综合久久久久久| 在线综合亚洲欧美在线视频| 日韩一区二区精品葵司在线| 精品久久久久久亚洲综合网| 久久久久久一二三区| 国产精品久久三区| 综合久久综合久久| 天天亚洲美女在线视频| 久久精品国内一区二区三区| 极品少妇一区二区三区精品视频 | 五月婷婷色综合| 韩国av一区二区三区| 国产精品一区二区无线| 成人午夜视频福利| 一本色道**综合亚洲精品蜜桃冫| 91福利区一区二区三区| 欧美大肚乱孕交hd孕妇| 中文字幕一区二区三区精华液 | 国产精品国产精品国产专区不蜜| 亚洲激情欧美激情| 久久国产乱子精品免费女| 白白色 亚洲乱淫| 欧美一区二区三区男人的天堂|