You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何利用SHAP值实现EEG生物标志物的分组特征重要性分析?

求助:EEG生物标志物的SHAP值分组汇总问题

背景

  • 基于不同机器学习算法+预处理步骤组合训练EEG生物标志物模型,所有模型采用StratifiedGroupKFold进行6折训练,每折模型以joblib格式存储
  • EEG每个频段的生物标志物由全部电极信号组成,单个生物标志物的特征不可拆分,必须保留所有电极数据

需求

初始用全量生物标志物训练模型,现在需要通过SHAP分析特征重要性,筛选可剔除的生物标志物,要求针对每个预处理步骤和模型单独分析。目前无法正确对单个生物标志物下的所有电极通道SHAP值进行汇总。

已完成工作与问题

  1. 已参考论文实现跨折的SHAP值汇总,代码如下:
for r, fold_file in enumerate(fold_files):
    model = joblib.load(fold_file)
    
    fold_splits = list(sgkf.split(X, y, groups))
    
    for train_index, test_index in fold_splits:
        X_train, X_test = X.iloc[train_index], X.iloc[test_index]
        y_train, y_test = y.iloc[train_index], y.iloc[test_index]

        explainer = shap.Explainer(model, X_train)
        train_shap_values = explainer(X_train)
        test_shap_values = explainer(X_test)

        for i in range(len(train_index)):
            train_folds_shap_values[train_index[i]] += train_shap_values.values[i] / (len(fold_splits) - 1)
        for i in range(len(test_index)):
            test_folds_shap_values[test_index[i]] += test_shap_values.values[i]

average_train_folds_shap_values = train_folds_shap_values / R
average_test_folds_shap_values = test_folds_shap_values / R

train_shap_df = pd.DataFrame(average_train_folds_shap_values, columns=columns)
test_shap_df = pd.DataFrame(average_test_folds_shap_values, columns=columns)
  1. 尝试按生物标志物分组汇总SHAP值,代码如下:
grouped_features = group_features(columns, biomarker_names, bands)

def aggregate_shap_values(shap_df, grouped_features):
    aggregated_shap_values = pd.DataFrame()
    for group, features in grouped_features.items():
        aggregated_shap_values[group] = shap_df[features].sum(axis=1)
    return aggregated_shap_values

train_aggregated_shap_df = aggregate_shap_values(train_shap_df, grouped_features)
test_aggregated_shap_df = aggregate_shap_values(test_shap_df, grouped_features)


shap.summary_plot(train_aggregated_shap_df.values, feature_names=train_aggregated_shap_df.columns.tolist())
  1. 当前问题:分组后的SHAP可视化无法体现不同生物标志物的重要性差异,与未分组的可视化效果差距明显:
  • 分组后可视化:分组后SHAP汇总图
  • 未分组可视化:未分组SHAP汇总图

恳请各位提供正确的生物标志物SHAP值分组汇总方法,让可视化能有效区分不同生物标志物的重要性。


内容的提问来源于stack exchange,提问作者Zachai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 10:02:25