当前位置: 首页 > news >正文

用SHAP进行多模型解释性分析:类别与数值预测案例

shap分析代码案例,多个机器学习模型+shap解释性分析的案例,做好的多个模型和完整的shap分析拿去直接运行,含模型之间的比较评估。 类别预测和数值预测的案例代码都有,类别预测用到的6个模型是(catboost、xgboost、knn、logistic、bayes,svc),数值预测用到的6个模型是(线性回归、随机森林、xgboost、lightgbm、支持向量机、knn)

在机器学习领域,模型的可解释性变得越来越重要。SHAP(SHapley Additive exPlanations)是一种强大的工具,能帮助我们理解模型的预测过程。今天就来分享多个机器学习模型结合SHAP进行解释性分析的案例,涵盖类别预测和数值预测。

类别预测案例

1. 准备数据与必要库

我们先导入所需的库,并准备数据集。这里假设使用的是经典的鸢尾花数据集。

from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split import pandas as pd import shap import numpy as np import catboost as cb import xgboost as xgb from sklearn.neighbors import KNeighborsClassifier from sklearn.linear_model import LogisticRegression from sklearn.naive_bayes import GaussianNB from sklearn.svm import SVC from sklearn.metrics import accuracy_score iris = load_iris() X = pd.DataFrame(iris.data, columns=iris.feature_names) y = iris.target X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

2. 构建与训练模型

CatBoost
cat_model = cb.CatBoostClassifier(iterations = 100, learning_rate = 0.1, depth = 6) cat_model.fit(X_train, y_train, eval_set=(X_test, y_test), use_best_model=True, early_stopping_rounds=10) y_pred_cat = cat_model.predict(X_test) cat_accuracy = accuracy_score(y_test, y_pred_cat) print(f'CatBoost模型准确率: {cat_accuracy}')

这里我们初始化了一个CatBoost分类器,设置了迭代次数、学习率和树的深度等参数。在训练过程中,使用验证集来评估模型性能,并且启用了早停机制,避免过拟合。

XGBoost
xgb_model = xgb.XGBClassifier(n_estimators = 100, max_depth = 6, learning_rate = 0.1) xgb_model.fit(X_train, y_train) y_pred_xgb = xgb_model.predict(X_test) xgb_accuracy = accuracy_score(y_test, y_pred_xgb) print(f'XGBoost模型准确率: {xgb_accuracy}')

XGBoost同样是一个强大的梯度提升框架,这里我们设置了树的数量、最大深度和学习率,训练后得到预测结果并计算准确率。

KNN
knn_model = KNeighborsClassifier(n_neighbors = 5) knn_model.fit(X_train, y_train) y_pred_knn = knn_model.predict(X_test) knn_accuracy = accuracy_score(y_test, y_pred_knn) print(f'KNN模型准确率: {knn_accuracy}')

KNN是基于邻居投票的简单模型,这里我们设置邻居数量为5,然后训练并评估。

Logistic Regression
logistic_model = LogisticRegression() logistic_model.fit(X_train, y_train) y_pred_logistic = logistic_model.predict(X_test) logistic_accuracy = accuracy_score(y_test, y_pred_logistic) print(f'逻辑回归模型准确率: {logistic_accuracy}')

逻辑回归是经典的线性分类模型,默认参数训练并评估其性能。

Gaussian Naive Bayes
bayes_model = GaussianNB() bayes_model.fit(X_train, y_train) y_pred_bayes = bayes_model.predict(X_test) bayes_accuracy = accuracy_score(y_test, y_pred_bayes) print(f'高斯朴素贝叶斯模型准确率: {bayes_accuracy}')

高斯朴素贝叶斯基于贝叶斯定理和特征的高斯分布假设进行分类。

SVC
svc_model = SVC(kernel='rbf') svc_model.fit(X_train, y_train) y_pred_svc = svc_model.predict(X_test) svc_accuracy = accuracy_score(y_test, y_pred_svc) print(f'SVC模型准确率: {svc_accuracy}')

支持向量机通过寻找最优超平面来进行分类,这里使用径向基函数(RBF)核。

3. SHAP分析

# CatBoost SHAP分析 explainer_cat = shap.Explainer(cat_model) shap_values_cat = explainer_cat(X_test) shap.summary_plot(shap_values_cat, X_test, plot_type="bar") # XGBoost SHAP分析 explainer_xgb = shap.Explainer(xgb_model) shap_values_xgb = explainer_xgb(X_test) shap.summary_plot(shap_values_xgb, X_test, plot_type="bar") # 其他模型类似...

对于每个模型,我们创建一个SHAP的解释器(Explainer),它会根据模型和数据计算出SHAP值。然后使用summary_plot展示特征的重要性,水平条形图可以直观地看出每个特征对预测结果的影响程度。

数值预测案例

1. 数据准备与库导入

这次我们假设使用波士顿房价数据集进行数值预测。

from sklearn.datasets import load_boston from sklearn.model_selection import train_test_split import pandas as pd import shap import numpy as np from sklearn.linear_model import LinearRegression from sklearn.ensemble import RandomForestRegressor import xgboost as xgb import lightgbm as lgb from sklearn.svm import SVR from sklearn.neighbors import KNeighborsRegressor from sklearn.metrics import mean_squared_error boston = load_boston() X = pd.DataFrame(boston.data, columns=boston.feature_names) y = boston.target X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

2. 构建与训练模型

线性回归
linear_model = LinearRegression() linear_model.fit(X_train, y_train) y_pred_linear = linear_model.predict(X_test) linear_mse = mean_squared_error(y_test, y_pred_linear) print(f'线性回归模型MSE: {linear_mse}')

线性回归通过最小化预测值与真实值之间的平方误差和来拟合数据。

随机森林
rf_model = RandomForestRegressor(n_estimators = 100) rf_model.fit(X_train, y_train) y_pred_rf = rf_model.predict(X_test) rf_mse = mean_squared_error(y_test, y_pred_rf) print(f'随机森林模型MSE: {rf_mse}')

随机森林由多个决策树组成,通过平均树的预测结果来进行回归。

XGBoost回归
xgb_reg_model = xgb.XGBRegressor(n_estimators = 100, max_depth = 6, learning_rate = 0.1) xgb_reg_model.fit(X_train, y_train) y_pred_xgb_reg = xgb_reg_model.predict(X_test) xgb_reg_mse = mean_squared_error(y_test, y_pred_xgb_reg) print(f'XGBoost回归模型MSE: {xgb_reg_mse}')

与分类的XGBoost类似,这里用于回归任务,设置了相关参数并训练评估。

LightGBM
lgb_model = lgb.LGBMRegressor(n_estimators = 100, max_depth = 6, learning_rate = 0.1) lgb_model.fit(X_train, y_train) y_pred_lgb = lgb_model.predict(X_test) lgb_mse = mean_squared_error(y_test, y_pred_lgb) print(f'LightGBM模型MSE: {lgb_mse}')

LightGBM是快速高效的梯度提升框架,这里用于回归。

支持向量机回归
svr_model = SVR(kernel='rbf') svr_model.fit(X_train, y_train) y_pred_svr = svr_model.predict(X_test) svr_mse = mean_squared_error(y_test, y_pred_svr) print(f'SVR模型MSE: {svr_mse}')

支持向量机用于回归任务,这里同样使用RBF核。

KNN回归
knn_reg_model = KNeighborsRegressor(n_neighbors = 5) knn_reg_model.fit(X_train, y_train) y_pred_knn_reg = knn_reg_model.predict(X_test) knn_reg_mse = mean_squared_error(y_test, y_pred_knn_reg) print(f'KNN回归模型MSE: {knn_reg_mse}')

KNN用于回归时,根据邻居样本的均值来预测目标值。

3. SHAP分析

# 线性回归SHAP分析 explainer_linear = shap.Explainer(linear_model) shap_values_linear = explainer_linear(X_test) shap.summary_plot(shap_values_linear, X_test, plot_type="bar") # 随机森林SHAP分析 explainer_rf = shap.Explainer(rf_model) shap_values_rf = explainer_rf(X_test) shap.summary_plot(shap_values_rf, X_test, plot_type="bar") # 其他模型类似...

同样为每个回归模型创建SHAP解释器,计算SHAP值并可视化特征重要性。

模型比较评估

类别预测模型

我们可以将各个类别预测模型的准确率放在一个表格中进行直观比较:

模型准确率
CatBoost{cat_accuracy}
XGBoost{xgb_accuracy}
KNN{knn_accuracy}
逻辑回归{logistic_accuracy}
高斯朴素贝叶斯{bayes_accuracy}
SVC{svc_accuracy}

通过比较可以看出不同模型在该数据集上的性能差异,同时结合SHAP分析可以了解模型预测依赖的关键特征。

数值预测模型

对于数值预测模型,我们比较它们的均方误差(MSE):

模型MSE
线性回归{linear_mse}
随机森林{rf_mse}
XGBoost回归{xgbregmse}
LightGBM{lgb_mse}
SVR{svr_mse}
KNN回归{knnregmse}

较低的MSE表示模型预测值与真实值更接近,性能更好。结合SHAP分析,我们能深入了解每个特征对房价预测的贡献。

shap分析代码案例,多个机器学习模型+shap解释性分析的案例,做好的多个模型和完整的shap分析拿去直接运行,含模型之间的比较评估。 类别预测和数值预测的案例代码都有,类别预测用到的6个模型是(catboost、xgboost、knn、logistic、bayes,svc),数值预测用到的6个模型是(线性回归、随机森林、xgboost、lightgbm、支持向量机、knn)

希望这些案例能帮助你更好地理解多个机器学习模型以及SHAP在模型解释性方面的应用,在实际项目中灵活运用这些方法,提高模型的可解释性和性能。

http://www.jsqmd.com/news/405755/

相关文章:

  • CT断层成像系列09——三维锥束Shepp-Logan头模型设计实现与正向投影实现(附Matlab代码)
  • 2026曝气池清理厂家推荐,专业实力看得见,专业的曝气池清理公司推荐榜深度剖析助力明智之选 - 品牌推荐师
  • Czkawka下载安装完整教程:免费重复文件清理工具(附安装包,2026最新) - xiema
  • 笛卡尔树
  • 外包项目压力山大,XinServer 是我的救命稻草
  • 2026年欧曼增压器市场:直销厂家口碑现状解析,欧宝A14net增压器/福康增压器,增压器厂商排行 - 品牌推荐师
  • [AI提效-30]- 2026年国内OPC社区全景地图
  • 2026污水处理设备指南:口碑佳的品牌推荐,智能一体化污水处理设备/帘式MBR膜,污水处理设备厂家哪家靠谱 - 品牌推荐师
  • P7708 题解
  • 大模型时代交互革命:小白也能秒懂,收藏必备,开启认知新纪元!
  • 保姆级实测!小白5行代码接入谷歌Gemini 3.1 Pro,复杂推理能力翻倍,速收藏!
  • JVM--16-面试题2:请详细描述 JVM 的运行时数据区
  • CF1304C
  • 技术演进中的开发沉思-371:final 关键字(中)
  • 常规正则表达式手册
  • 一款纯VF控制的变频器方案方案说明:可做0.2KW7.5KW/220V,0.2KW75KW/380V
  • python+uniapp微信小程序的连锁奶茶店甜品点单系统
  • [兰溪民间故事]董半仙的起因
  • 链板提升机哪家强?这几家制造企业值得关注,金属链板/食品链板/垂直提升机/耐高温网带/连续提升机,提升机制造商哪家好 - 品牌推荐师
  • 建议收藏|千笔,备受喜爱的降AI率平台
  • 实战指南:利用机器学习算法构建高效的保险欺诈检测系统
  • G002 强连通分量 Tarjan算法 CF999E Reachability from the Capital
  • 研究生收藏!抢手爆款的AI论文写作软件 —— 千笔·专业学术智能体
  • 原创论文:基于LSTM神经网络的金属材料机器学习本构模型研究
  • 新手也能上手 8个一键生成论文工具测评:本科生毕业论文写作全攻略
  • 基于Java的客户管理系统源码解析
  • 综述不会写?9个AI论文软件测评:本科生毕业论文写作神器推荐
  • 赶deadline必备!风靡全网的降AI率软件 —— 千笔·降AIGC助手
  • springboot高校学生学业预警系统vue
  • 互联网大厂Java求职面试实战:Spring Boot微服务与Kafka消息队列解析