衡水建设投资集团网站windows版本的wordpress

张小明 2026/1/10 9:20:05
衡水建设投资集团网站,windows版本的wordpress,欧美网站风格,wordpress管理后台添加导航栏SHAP值的解读 对于信贷问题#xff0c;我们除了希望知道是否存在风险#xff0c;还希望知道每个特征贡献了多少#xff0c;比如年收入0.15#xff0c;收入高#xff0c;加分;负债率-0.30负债太高#xff0c;减分;工作年限0.05工作稳定#xff0c;小加分;信用评分-0.25 …SHAP值的解读对于信贷问题我们除了希望知道是否存在风险还希望知道每个特征贡献了多少比如年收入0.15收入高加分;负债率-0.30负债太高减分;工作年限0.05工作稳定小加分;信用评分-0.25 信用不好减分;年龄0.02影响很小把模型的决策分解到每个特征上到这里你可能心想这样是不是很类似于线性回归的特征前的系数 yax1bx2cx3那既然如此我直接选择用线性回归的系数作解释那岂不是更好?线性回归的系数:y0.15x收入 (-0.30)x负债率 0.05x工作年限 (-0.25)x信用评分0.02x年龄系数是固定的:不管是谁收入的系数永远是 0.15全局解释:一个系数解释所有样本简单但假设特征和目标是线性关系比如线性回归会说收入每增加1万贡献固定增加 x。但现实中:收入从 5万→30万影响很大收入从 100 万→500 万,影响就没那么大了(边际效应递减)SHAP能捕捉这种非线性关系核心差异就在于SHAP值是因人而异的张三的“收入”贡献可能是0.15李四的可能是0.08局部解释每个样本有自己的一组SHAP值复杂但能捕捉非线性关系同一个特征不同样本贡献不同这种非线性如何呈现:特征本身的非线性关系:比如边际效应特征之间存在交互效应:男性(性别)年龄(25)发生质变Shapley 值的核心就是当特征之间有交互作用时如何公平地把功劳分给每个特征SHAP 的原理来自博弈论但我们用一个更简单的例子来理解:想象三个人合伙开了一家奶茶店年底赚了 100 万。问题来了:这 100 万怎么分?小王负责研发配方、小李负责营销推广、小张负责店面运营直接三等分?不公平!因为每个人的贡献不一样。经济学家 Shapley 提出了一个方法:数学家 做了数学假设:博弈论基础上有4条规则满足这4个客观规则的只有 shap 值很自洽一般来说基准值不是-500 500100 个样本对这个样本的预测取平均(训练)基准值shap 值 本质上是解释模型在训练集学习的东西 加入什么都没学 直接取平均 最好的SHAP 在机器学习中的应用开店机器学习合伙人 特征总收入 预测值 - 基准值每人贡献 每个特征的 SHAP 值基准值(Base Value):模型在所有样本上的平均预测值三人合伙前收入是 0三人合伙后收入是 100万要分配的蛋糕就是 100万-0100 万基准值 没有任何特征信息时的默认预测(相当于0”的起点)这个值一般就是平均值把训练集的所有样本都输入模型得到所有预测值取平均值在没有关于这个特定样本的区分性信息时最合理的猜测就是平均值预测值 加入所有特征后的预测(相当于100 万的终点)要分配的蛋糕预测值 -基准值核心公式:模型预测值 基准值SHAP(特征 1)SHAP(特征 2)..SHAP(特征 N)SHAP 值加起来 预测值与基准值的差!那么如何实现 shaply 值动态变化呢?上面说的是平均这一家店是一个样本对于多家店每个店都是样本所以特征贡献不同那么对于一个样本如果控制变量计算特征贡献呢?真实在做的时候肯定是没法实现控制其他特征不动检测单个特征的贡献其实还是多样本比对了shap 值本质上也是一个近似值。虽然不完美但 SHAP 是目前理论最完善、应用最广泛的解释方法SHAP 值的计算用训练还是测试集?先说结论两者均可但是为了图好看一般都是选择训练集。做机器学习的专业大多都是交叉学科本身你的研究多是针对私有数据集别人不会关注你的泛化性。所以不必因为这个纠结。shap 值是每个样本的每个特征都会得到对应类别的值,所以如果你的数据量本身就不大用训练集来绘制点多会让图美观很多或者也可以对测试集插值也可以起到一样的效果补充一个 shap图美观的小技巧可以绘制出每一个类别 shap 曲线的置信区间因为机器学习多是点估计而区间估计会让你的结果更加具有信服力利用bootstrap 重采样思想可以绘制出置信区间自己写一下 shap 图函数不用借助 shap 库的接口。import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns from sklearn.datasets import load_diabetes from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestRegressor from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_squared_error, r2_score, mean_absolute_error import warnings warnings.filterwarnings(ignore) # --- 1. 全局设置 --- plt.rcParams[font.sans-serif] [SimHei] # 中文字体 plt.rcParams[axes.unicode_minus] False # 正常显示负号 sns.set(stylewhitegrid, fontSimHei) # # 2. 加载糖尿病数据集 # print(正在加载糖尿病数据集...) # 加载数据 diabetes load_diabetes() X, y diabetes.data, diabetes.target # 转换为DataFrame以便更好地显示 df pd.DataFrame(X, columnsdiabetes.feature_names) df[target] y print(*30 数据集概览 *30) print(f数据形状: {df.shape}) print(f特征数量: {len(diabetes.feature_names)}) print(f目标变量: 一年后疾病进展的定量测量) print(\n特征说明:) for i, (name, desc) in enumerate(zip(diabetes.feature_names, diabetes.DESCR.split(\n)[10:20])): print(f{i1:2d}. {name:15s} - {desc.strip()}) print(\n前5行数据:) print(df.head()) # # 3. 数据探索性分析 # print(\n *30 数据探索分析 *30) # 创建可视化 fig, axes plt.subplots(2, 3, figsize(15, 10)) axes axes.flatten() # 1. 目标变量分布 axes[0].hist(y, bins30, colorskyblue, edgecolorblack, alpha0.7) axes[0].set_title(目标变量分布, fontsize12, fontweightbold) axes[0].set_xlabel(疾病进展) axes[0].set_ylabel(频数) axes[0].grid(True, alpha0.3) # 2. 特征相关性热图 corr_matrix df.corr() sns.heatmap(corr_matrix, annotFalse, cmapcoolwarm, center0, axaxes[1], cbar_kws{shrink: 0.8}) axes[1].set_title(特征相关性热图, fontsize12, fontweightbold) # 3. 目标变量与重要特征的关系 important_features [bmi, s5, bp, s3] for i, feature in enumerate(important_features[:3]): axes[i2].scatter(df[feature], y, alpha0.5, s20) axes[i2].set_title(f目标 vs {feature}, fontsize12) axes[i2].set_xlabel(feature) axes[i2].set_ylabel(疾病进展) axes[i2].grid(True, alpha0.3) plt.suptitle(糖尿病数据集探索性分析, fontsize14, fontweightbold, y1.02) plt.tight_layout() plt.show() # 数据统计 print(\n数据统计信息:) print(df.describe().round(3)) # # 4. 训练随机森林模型 # print(\n *30 模型训练 *30) # 划分数据集 X_train, X_test, y_train, y_test train_test_split( X, y, test_size0.2, random_state42 ) print(f训练集形状: {X_train.shape}) print(f测试集形状: {X_test.shape}) # 训练随机森林模型 rf_model RandomForestRegressor( n_estimators100, max_depth10, random_state42, n_jobs-1 ) rf_model.fit(X_train, y_train) y_pred rf_model.predict(X_test) # 评估模型 mse mean_squared_error(y_test, y_pred) rmse np.sqrt(mse) mae mean_absolute_error(y_test, y_pred) r2 r2_score(y_test, y_pred) print(\n模型性能评估:) print(f均方误差 (MSE): {mse:.3f}) print(f均方根误差 (RMSE): {rmse:.3f}) print(f平均绝对误差 (MAE): {mae:.3f}) print(f决定系数 (R²): {r2:.3f}) # 预测结果可视化 plt.figure(figsize(8, 6)) plt.scatter(y_test, y_pred, alpha0.5, colorblue) plt.plot([y.min(), y.max()], [y.min(), y.max()], r--, lw2) plt.xlabel(真实值) plt.ylabel(预测值) plt.title(随机森林模型预测结果, fontsize14, fontweightbold) plt.grid(True, alpha0.3) plt.show() # # 5. SHAP可解释性分析 # print(\n *30 SHAP可解释性分析 *30) # 安装shap库如果未安装 try: import shap print(SHAP库已安装开始分析...) except ImportError: print(正在安装SHAP库...) import subprocess import sys subprocess.check_call([sys.executable, -m, pip, install, shap]) import shap # 初始化SHAP解释器 explainer shap.TreeExplainer(rf_model) shap_values explainer.shap_values(X_test) # 转换为DataFrame以便更好地处理 shap_df pd.DataFrame(shap_values, columnsdiabetes.feature_names) print(\nSHAP分析完成!) print(fSHAP值形状: {shap_df.shape}) # # 6. SHAP可视化分析 # print(\n *30 SHAP可视化分析 *30) # 创建可视化图表 fig, axes plt.subplots(2, 2, figsize(16, 12)) # 1. 特征重要性总结图 shap.summary_plot(shap_values, X_test, feature_namesdiabetes.feature_names, showFalse, plot_sizeNone, max_display10) plt.title(SHAP特征重要性总结, fontsize14, fontweightbold, y1.02) fig1 plt.gcf() fig1.set_size_inches(10, 6) plt.tight_layout() plt.show() # 2. 特征重要性条形图 plt.figure(figsize(10, 6)) shap.summary_plot(shap_values, X_test, feature_namesdiabetes.feature_names, plot_typebar, showFalse, max_display10) plt.title(SHAP特征重要性平均绝对影响, fontsize14, fontweightbold) plt.tight_layout() plt.show() # 3. 单个特征的SHAP依赖图选择最重要的3个特征 important_indices np.argsort(np.abs(shap_values).mean(0))[-3:][::-1] important_features [diabetes.feature_names[i] for i in important_indices] print(f\n最重要的3个特征:) for i, feature in enumerate(important_features, 1): shap_mean_abs np.abs(shap_df[feature]).mean() print(f{i}. {feature}: 平均绝对SHAP值 {shap_mean_abs:.3f}) fig, axes plt.subplots(1, 3, figsize(15, 4)) for idx, (ax, feature) in enumerate(zip(axes, important_features)): feature_idx list(diabetes.feature_names).index(feature) # 使用shap的partial_dependence_plot shap.dependence_plot( feature_idx, shap_values, X_test, feature_namesdiabetes.feature_names, axax, showFalse ) ax.set_title(f{feature}的SHAP依赖图, fontsize12, fontweightbold) ax.set_xlabel(feature) ax.set_ylabel(SHAP值) ax.grid(True, alpha0.3) plt.suptitle(重要特征的SHAP依赖图, fontsize14, fontweightbold, y1.05) plt.tight_layout() plt.show() # 4. 单个样本的SHAP解释选择3个样本 print(\n *30 单样本解释 *30) # 选择3个有代表性的样本 sample_indices [0, 50, 100] # 可以根据需要调整 fig, axes plt.subplots(1, 3, figsize(15, 5)) for i, (ax, sample_idx) in enumerate(zip(axes, sample_indices)): # 创建force plot瀑布图 shap.force_plot( explainer.expected_value, shap_values[sample_idx, :], X_test[sample_idx, :], feature_namesdiabetes.feature_names, matplotlibTrue, showFalse, text_rotation30 ) # 获取当前图形 temp_fig plt.gcf() # 手动设置标题和标签 ax.set_title(f样本 {sample_idx} 的SHAP解释, fontsize12, fontweightbold) ax.set_xlabel(特征) ax.set_ylabel(SHAP贡献) # 清理并显示 plt.close(temp_fig) plt.suptitle(单个样本的SHAP解释Force Plot, fontsize14, fontweightbold, y1.05) plt.tight_layout() plt.show() # 显示样本的具体数值 for i, sample_idx in enumerate(sample_indices): print(f\n样本 {sample_idx} 详情:) print(f真实值: {y_test[sample_idx]:.2f}) print(f预测值: {y_pred[sample_idx]:.2f}) print(f预测偏差: {y_pred[sample_idx] - y_test[sample_idx]:.2f}) # 显示特征值和SHAP值 sample_shap shap_values[sample_idx, :] important_features_idx np.argsort(np.abs(sample_shap))[-5:][::-1] print(最重要的5个特征贡献:) for j, feat_idx in enumerate(important_features_idx): feat_name diabetes.feature_names[feat_idx] feat_value X_test[sample_idx, feat_idx] shap_value sample_shap[feat_idx] print(f {feat_name:10s}: 值{feat_value:6.3f}, SHAP{shap_value:7.3f}) # 5. 特征交互分析 print(\n *30 特征交互分析 *30) # 寻找最重要的交互特征 interaction_feature bmi # 选择一个重要特征 feature_idx list(diabetes.feature_names).index(interaction_feature) plt.figure(figsize(10, 6)) shap.dependence_plot( feature_idx, shap_values, X_test, feature_namesdiabetes.feature_names, interaction_indexauto, # 自动检测交互特征 showFalse ) plt.title(f{interaction_feature}的特征交互分析, fontsize14, fontweightbold) plt.xlabel(interaction_feature) plt.ylabel(SHAP值) plt.grid(True, alpha0.3) plt.tight_layout() plt.show() # # 7. 与传统特征重要性对比 # print(\n *30 特征重要性对比 *30) # 传统特征重要性基于基尼不纯度 traditional_importance pd.DataFrame({ 特征: diabetes.feature_names, 传统重要性: rf_model.feature_importances_ }).sort_values(传统重要性, ascendingFalse) # SHAP特征重要性基于平均绝对SHAP值 shap_importance pd.DataFrame({ 特征: diabetes.feature_names, SHAP重要性: np.abs(shap_values).mean(0) }).sort_values(SHAP重要性, ascendingFalse) print(\n传统特征重要性基尼不纯度:) print(traditional_importance.head(10)) print(\nSHAP特征重要性平均绝对SHAP值:) print(shap_importance.head(10)) # 可视化对比 fig, axes plt.subplots(1, 2, figsize(14, 6)) # 传统特征重要性 axes[0].barh(range(10), traditional_importance[传统重要性].head(10)[::-1], colorskyblue, alpha0.7) axes[0].set_yticks(range(10)) axes[0].set_yticklabels(traditional_importance[特征].head(10)[::-1]) axes[0].set_xlabel(重要性得分) axes[0].set_title(传统特征重要性, fontsize12, fontweightbold) axes[0].grid(True, alpha0.3, axisx) # SHAP特征重要性 axes[1].barh(range(10), shap_importance[SHAP重要性].head(10)[::-1], colorlightcoral, alpha0.7) axes[1].set_yticks(range(10)) axes[1].set_yticklabels(shap_importance[特征].head(10)[::-1]) axes[1].set_xlabel(平均绝对SHAP值) axes[1].set_title(SHAP特征重要性, fontsize12, fontweightbold) axes[1].grid(True, alpha0.3, axisx) plt.suptitle(特征重要性方法对比, fontsize14, fontweightbold, y1.02) plt.tight_layout() plt.show() # # 8. 模型对比分析 # print(\n *30 模型对比分析 *30) # 训练线性回归模型进行对比 lr_model LinearRegression() lr_model.fit(X_train, y_train) y_pred_lr lr_model.predict(X_test) # 计算线性回归的SHAP值使用KernelExplainer lr_explainer shap.KernelExplainer(lr_model.predict, X_train[:100]) # 使用子集提高速度 lr_shap_values lr_explainer.shap_values(X_test[:100]) # 使用子集 print(\n模型性能对比:) print(f随机森林 R²: {r2_score(y_test, y_pred):.3f}) print(f线性回归 R²: {r2_score(y_test[:100], y_pred_lr[:100]):.3f}) # 对比特征重要性 if lr_shap_values is not None: lr_shap_importance pd.DataFrame({ 特征: diabetes.feature_names, 线性回归SHAP: np.abs(lr_shap_values).mean(0) }).sort_values(线性回归SHAP, ascendingFalse) print(\n线性回归SHAP重要性:) print(lr_shap_importance.head(10)) # # 9. 总结报告 # print(\n *30 SHAP分析总结 *30) print(\n关键发现:) print(1. 最重要的预测特征:) for i, row in shap_importance.head(3).iterrows(): print(f {row[特征]}: 平均绝对SHAP值 {row[SHAP重要性]:.3f}) print(\n2. 模型解释性:) print( • SHAP提供了局部和全局的解释) print( • 可以理解每个特征对单个预测的贡献) print( • 揭示了特征之间的相互作用) print(\n3. 临床应用建议:) print( • 重点关注BMI、s5和血压等关键指标) print( • 这些特征对疾病进展预测有最大影响) print( • 可以为个性化医疗提供数据支持) print(\n4. 技术要点:) print( • 随机森林模型表现良好 (R² {:.3f}).format(r2)) print( • SHAP分析揭示了特征的非线性关系) print( • 与传统特征重要性方法相比SHAP更准确) # 保存结果 results { 模型性能: { R2: r2, RMSE: rmse, MAE: mae }, 特征重要性: shap_importance.to_dict(records)[:5] } import json with open(diabetes_shap_results.json, w, encodingutf-8) as f: json.dump(results, f, ensure_asciiFalse, indent2) print(f\n分析结果已保存到: diabetes_shap_results.json) print(\n *30 分析完成 *30)浙大疏锦行
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

做网站 蓝洋公司做网站的申请

使用华为云Flexus X实例部署LobeChat指南 在AI应用快速落地的今天,越来越多开发者希望拥有一款既美观又强大的本地化聊天助手。市面上虽然有不少开源项目,但真正能做到开箱即用、界面优雅且支持多模型接入的并不多——而 LobeChat 正是其中的佼佼者。 …

张小明 2025/12/23 0:42:52 网站建设

O2O网站制作需要多少钱手机版网站设计风格

数字化浪潮下,企业对数据协作的需求已从简单的表格记录升级为"实时同步、权限管控、系统集成"的复合型需求。传统Excel的版本混乱、数据孤岛问题日益凸显,而Airtable等SaaS工具的年度订阅费动辄数万元,还存在数据主权归属的隐患。 …

张小明 2026/1/5 16:09:38 网站建设

过年wordpress主机昭通seo

第一章:VSCode 量子作业的进度跟踪在开发量子计算项目时,Visual Studio Code(VSCode)已成为主流集成开发环境之一。结合 Q#、Python 和 Azure Quantum 扩展,开发者可在本地高效编写、模拟和提交量子作业。有效跟踪作业…

张小明 2026/1/9 11:19:29 网站建设

福永网站优化wordpress rss 修改

还在为论文的“从零到一”而熬夜爆肝吗?从灵光一闪的构思,到最终格式规范的成稿,每一步都像在闯关打怪。别慌,你的“智能副驾”——好写作AI已上线,专为辅助你打通论文创作的全流程。好写作AI官方网址:http…

张小明 2026/1/8 17:54:34 网站建设

东莞网络关键词排名seo自动点击排名

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 构建一个性能测试平台,对比传统FTP服务与Alist在多并发场景下的表现。测试指标包括:同时上传100个1GB文件的时间、100个用户同时浏览目录的响应时间、跨云存…

张小明 2026/1/1 16:12:37 网站建设

江苏城乡建设厅网站北京网站制作工作室

Agent落地的可靠实践:工作流控稳定,自主规划提效率 在AI Agent落地过程中,“工作流模式保障核心业务稳定,自主规划模式承接效率型搜集整理任务”是兼顾可靠性与智能化的核心策略——前者让Agent成为“标准化业务的执行者”&#x…

张小明 2026/1/9 15:08:22 网站建设