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

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特别重要,毕竟不能光让模型自说自话不是?

http://www.cnnetsun.cn/news/158638.html

相关文章:

  • MATLAB R2018A环境下的液相色谱信号自动调优降噪算法——交叉验证作为参数调节器
  • 计算机Java毕设实战-基于springboot的足球训练营系统的设计与实现设计与实现基于SpringBoot的青训足球综合运营平台设计与实现 【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 2025年软件测试技术发展趋势与从业者应对策略
  • 电驱动(电机+电控)开发验证方法与技巧的高清视频教程,深入讲解精细技术,掌握实用技巧
  • 每天24小时的电价(元/kWh)
  • C#编程下的自定义控件与OpenCVSharp结合应用:卡尺测距功能实现
  • NGBoost-shap方法回归任务,由斯坦福吴恩达团队提出,属于集成模型的一种2019年提出的
  • Langchain-Chatchat Kubernetes集群部署策略
  • Langchain-Chatchat日志监控与性能分析最佳实践
  • Langchain-Chatchat模型微调指南:适配垂直领域任务
  • 如何配置IPv6静态路由?解决企业网络难题
  • 【Linux网络基础】详解 TCP 面向连接 vs UDP 无连接
  • Langchain-Chatchat如何评估问答质量?指标体系构建
  • springboot在线教育系统(11528)
  • 测了多款AI自动生成PPT工具,真正能用的不到一半
  • springboot星之语明星周边产品销售网站的设计与实现(11529)
  • 毕设救星:Spring Boot + Neo4j 打造“医疗知识问答”——基于知识图谱的智能导诊平台
  • 华为网络设备基本配置命令
  • 志同道合交友网站毕业论文+PPT(附源代码+演示视频)
  • 【Java 25 LTS六大核心特性】
  • Langchain-Chatchat助力医疗文档智能检索与问答
  • Langchain-Chatchat如何实现文档相似度比对?查重与去重依据
  • java学习--String和StringBuffer互转
  • 如何用Langchain-Chatchat实现本地化AI智能问答?
  • Langchain-Chatchat如何处理多义词歧义?上下文感知消歧算法
  • Langchain-Chatchat如何实现文档访问统计?了解知识使用情况
  • Langchain-Chatchat与Argo CD持续交付集成:自动化部署流水线
  • Langchain-Chatchat与Consul服务发现集成:动态节点管理
  • Langchain-Chatchat与Airflow工作流集成:复杂ETL流程调度
  • 验证码实现