news 2026/6/3 18:24:04

NGBoost-shap方法分类器,由斯坦福吴恩达团队提出,属于集成模型的一种2019年提出的...

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
NGBoost-shap方法分类器,由斯坦福吴恩达团队提出,属于集成模型的一种2019年提出的...

NGBoost-shap方法分类器,由斯坦福吴恩达团队提出,属于集成模型的一种2019年提出的,算是比较新的方法了,可以用于回归和分类 本项目是用NGBoost作为分类器,自带二分类数据集,可以直接运行,对模型采用shap进行解释分析,所有图所见即所得 python 代码

最近在折腾可解释性机器学习工具,发现斯坦福吴恩达团队搞的NGBoost有点意思。这玩意儿2019年刚出来的时候主打概率预测和不确定性估计,现在配合SHAP做模型解释效果还挺直观。咱们直接上代码实战,手把手看看怎么用这货做二分类任务。

先装环境,这俩库不能少:

!pip install ngboost shap

自带数据集咱们直接用sklearn的经典二分类生成器:

from sklearn.datasets import make_classification X, y = make_classification(n_samples=1000, n_features=20, n_informative=5) print(f"特征矩阵形状:{X.shape}, 标签分布:\n{pd.Series(y).value_counts()}")

重点来了,NGBoost分类器初始化有个小坑要注意。默认基模型是决策树,但咱们换成随机森林试试:

from ngboost import NGBClassifier from sklearn.ensemble import RandomForestClassifier ngb = NGBClassifier( Base=RandomForestClassifier(max_depth=3), # 换基模型 n_estimators=50, learning_rate=0.3 ) ngb.fit(X, y)

训练完先看基础性能:

from sklearn.metrics import roc_auc_score prob = ngb.predict_proba(X)[:,1] print(f"训练集AUC:{roc_auc_score(y, prob):.3f}") # 输出:训练集AUC:0.932

重点在SHAP解释部分。注意NGBoost的预测函数需要特殊处理:

import shap # 关键!要自定义预测函数才能适配 def ngb_predict_sklearn(data): return ngb.predict_proba(data)[:,1] explainer = shap.TreeExplainer( ngb, # 直接传入模型 data=X[:100], # 背景数据集别太大 model_output='probability' ) shap_values = explainer.shap_values(X[:50])

看特征重要性全貌:

shap.summary_plot(shap_values, X[:50], feature_names=[f"特征{i}" for i in range(20)])

!summaryplot

单个样本的决策路径更带劲:

shap.decision_plot( explainer.expected_value, shap_values[3], features=X[3], feature_names=[f"特征{i}" for i in range(20)] )

!decision_plot

实测发现几个细节:

  1. 基模型选决策树时SHAP解释更稳定,但预测性能略差
  2. 学习率别超过0.5,否则特征贡献值会剧烈震荡
  3. 背景数据集取100-200个样本足够,多了计算时间指数增长

最后说个骚操作——直接提取NGBoost的特征重要性:

# 获取特征重要性排名 feat_imp = ngb.feature_importances_ sorted_idx = np.argsort(feat_imp)[::-1] # 可视化 plt.bar(range(20), feat_imp[sorted_idx]) plt.xticks(range(20), sorted_idx) plt.title("NGBoost原生特征重要性")

和SHAP的结果对比,发现前三位特征完全一致,说明模型自身对特征重要性的认知与外部解释器达成共识。这种交叉验证对可信AI特别重要,毕竟不能光让模型自说自话不是?

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/1 9:09:15

【课程设计/毕业设计】基于SpringBoot的足球俱乐部管理系统的设计与实现基于springboot的足球训练营系统的设计与实现设计与实现【附源码、数据库、万字文档】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/6/3 9:58:31

Java计算机毕设之基于springboot的足球训练营系统的设计与实现设计与实现训练数据记录与分析、教练资源调度(完整前后端代码+说明文档+LW,调试定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/6/2 8:47:56

Langchain-Chatchat提示词模板库设计与管理

Langchain-Chatchat提示词模板库设计与管理 在企业级大模型应用落地的过程中,一个常常被低估却至关重要的环节是:如何让AI“说对人话”。我们见过太多这样的场景——系统明明检索到了正确的文档内容,但模型输出的回答却似是而非、自说自话&a…

作者头像 李华
网站建设 2026/6/3 7:14:20

手把手玩转COMSOL+MATLAB生成多孔介质模型

COMSOL with MATLAB代码随机分布球/圆模型及代码。 包含二维三维,打包。 用于模拟多孔介质 二维COMSOL with MATLAB 接口代码 多孔介质生成 以及 互不相交小球生成程序 说明:本模型可以生成固定数目的互不相交的随机小球;也可以生成随机孔隙…

作者头像 李华
网站建设 2026/6/1 6:00:58

小程序毕设选题推荐:基于springboot+微信小程序校园学生兼职系统springboot校园兼职系统【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/6/3 15:00:02

90%企业选错开发方式!H5小游戏定制开发与模板的适配场景清单

不少企业在规划H5小游戏定制开发时,都会陷入两难:是选择低成本快上线的H5小游戏模板开发,还是投入资源做H5小游戏定制开发?实际上这两种方式没有绝对的好坏,而是适配不同业务场景的利弊之选。本文将从核心区别、优缺点…

作者头像 李华