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

NGBoost-shap方法回归任务,由斯坦福吴恩达团队提出,属于集成模型的一种2019年提出的

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

NGBoost这玩意儿最近在回归任务里挺火,作为吴恩达团队整出来的新活,它最骚的地方在于既能预测数值还能估计不确定性。咱们今天直接上手实操,用自带数据集快速搞个可复现的demo,顺带用SHAP把模型掰开了揉碎了看看。

先装个环境(别问,问就是pip大法好):

pip install ngboost shap

上代码直接开整!先加载内置的糖尿病数据集:

from ngboost import NGBRegressor from sklearn.datasets import load_diabetes from sklearn.model_selection import train_test_split X, y = load_diabetes(return_X_y=True) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) ngb = NGBRegressor(Dist=ngboost.distns.Normal, n_estimators=100) ngb.fit(X_train, y_train) # 预测时同时拿到预测值和置信区间 preds = ngb.pred_dist(X_test) print(f"均值预测示例:{preds.params['loc'][:3]}") print(f"标准差示例:{preds.params['scale'][:3]}")

这里用了正态分布作为基分布,n_estimators设到100能保证基础学习器足够多。预测结果直接返回分布参数,比普通回归只能输出个数值有意思多了。

接下来用SHAP扒开模型看细节:

import shap # 用TreeExplainer适配树模型结构 explainer = shap.TreeExplainer(ngb) shap_values = explainer.shap_values(X_test) # 特征重要性可视化 shap.summary_plot(shap_values, X_test, feature_names=load_diabetes().feature_names)

运行后会跳出两张神图:第一张是特征总体重要性,明显能看到s5(血清检测指标)和age对预测结果影响最大;第二张是特征作用方向图,每个点颜色代表特征值大小,能直观看到高年龄对应的预测值偏移方向。

想具体看单个预测案例?上force_plot:

# 选个有意思的样本观察 sample_idx = 15 shap.force_plot(explainer.expected_value, shap_values[sample_idx], X_test[sample_idx], feature_names=load_diabetes().feature_names)

这图看着就很有说服力——基线值在150左右,s5特征硬生生把预测结果拉低了20个点,bmi又给顶上去10个点。这种可视化比看表格里的系数值直观十个Level!

实测中发现NGBoost对参数挺敏感,把Dist换成LogNormal分布,预测区间立马变得右偏。SHAP分析时也会发现特征影响方向发生微妙变化,这说明模型结构的选择会直接影响可解释性结果。建议跑多个分布配置对比着看,特别是当业务场景对不确定性方向有要求时。

最后来个骚操作:把预测分布画出来看不确定性

import matplotlib.pyplot as plt plt.figure(figsize=(10,6)) plt.scatter(y_test, preds.params['loc'], alpha=0.5) plt.errorbar(y_test, preds.params['loc'], yerr=2*preds.params['scale'], fmt='o', alpha=0.3) plt.plot([y.min(), y.max()], [y.min(), y.max()], 'r--')

这个误差带可视化直接暴露了模型在极端值区域的预测乏力——当真实值超过250时,预测点明显偏离红色对角线,同时误差带急剧变宽。这种双重可视化把模型优缺点直接拍脸上,比单纯看R²得分带劲多了。

总结下来,NGBoost+SHAP的组合拳特别适合需要量化不确定性的场景(比如金融风控、医疗预测)。代码层面几乎零魔改就能出效果,但要注意分布假设对可解释性的影响。下次遇到产品经理说"我要个能解释的AI",直接甩这个方案过去就完事了。

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

相关文章:

  • 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流程调度
  • 验证码实现
  • 2.1 CPU脚本性能优化简介
  • Langchain-Chatchat问答系统压测报告:万级QPS承载能力验证
  • Langchain-Chatchat支持自定义元数据字段:扩展文档属性信息
  • 双侧独立电驱动车辆转向控制:Matlab/Simulink建模之旅
  • 500kW三相光伏并网逆变器仿真模型探索
  • 基于Optislang的电机多目标优化:以电机气息磁通密度空间某一阶次为优化目标教程
  • 彼得林奇对公司自由现金流转换率的分析