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

ANN建模样本维度不匹配问题解决及年度特征重要性获取

解决train_test_split样本不匹配报错 + ANN特征重要性获取方案

一、先解决样本数不匹配的问题

你现在的核心问题是数据集维度搞反了:

  • 多指标数据集(22,30)应该是22个指标、30个年度样本,但机器学习模型要求输入X的维度必须是(样本数, 特征数),也就是你得把它转成(30,22),这样才和台风总数的30个样本对应上。

直接上代码修正:

import numpy as np
from sklearn.model_selection import train_test_split

# 假设你的多指标原始数据是X_raw,维度(22,30)
X = X_raw.T  # 转置后变成(30,22),30个样本,每个样本22个特征
y = 你的台风总数数组  # 维度保持(30,)

# 现在可以正常执行划分
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

二、ANN模型的特征重要性获取方法

ANN属于黑箱模型,没有树模型那样原生的特征重要性,但有三种实用方法:

1. 基于输入层权重的简单分析

全连接ANN的输入层到第一个隐藏层的权重绝对值,能在一定程度上反映特征的初始影响力——权重绝对值越大,特征对模型的初始驱动越强。

# 假设训练好的ANN模型是model
input_layer_weights = model.layers[0].get_weights()[0]  # 形状(22, 隐藏层神经元数)
# 计算每个特征的权重绝对值均值作为重要性评分
feature_importance = np.mean(np.abs(input_layer_weights), axis=1)
# 按重要性从高到低排序输出
sorted_idx = np.argsort(feature_importance)[::-1]
for idx in sorted_idx:
    print(f"指标{idx+1} 重要性: {feature_importance[idx]:.4f}")

⚠️ 注意:这种方法只能反映初始层的影响,无法体现后续层的特征交互,适合快速粗略分析。

2. 置换特征重要性(推荐通用方法)

通过随机打乱单个特征的取值,观察模型预测性能的下降幅度——下降越多,说明该特征对模型的实际贡献越大。这是模型无关的方法,适用于任何ML模型。

from sklearn.inspection import permutation_importance

# 先确保模型已经训练完成
model.fit(X_train, y_train)
# 在测试集上计算置换重要性,n_repeats是重复次数,次数越多结果越稳定
perm_result = permutation_importance(model, X_test, y_test, n_repeats=10, random_state=42)
# 排序输出
sorted_idx = perm_result.importances_mean.argsort()[::-1]
for idx in sorted_idx:
    print(f"指标{idx+1} 重要性均值: {perm_result.importances_mean[idx]:.4f} (标准差: {perm_result.importances_std[idx]:.4f})")

3. SHAP值分析(解释性最强)

SHAP基于博弈论,能精确计算每个特征对单个样本预测结果的贡献,也能汇总得到全局特征重要性,是黑箱模型解释的黄金标准。

import shap

# 初始化DeepExplainer,用训练集数据作为背景
explainer = shap.DeepExplainer(model, X_train)
# 计算测试集的SHAP值
shap_vals = explainer.shap_values(X_test)
# 全局重要性:每个特征的SHAP值绝对值的均值
global_importance = np.mean(np.abs(shap_vals), axis=0)
# 排序输出
sorted_idx = global_importance.argsort()[::-1]
for idx in sorted_idx:
    print(f"指标{idx+1} 全局重要性: {global_importance[idx]:.4f}")
# 还可以用SHAP汇总图可视化,更直观
shap.summary_plot(shap_vals, X_test)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 00:41:04