You need to enable JavaScript to run this app. R语言神经网络敏感性分析:识别对输出影响最大的特征变量
优惠活动
大模型
产品
解决方案
定价
更多

R语言神经网络敏感性分析:识别对输出影响最大的特征变量

针对nnet二分类模型的特征敏感性/重要性分析可行方案

你之前使用lek.fun未得到有效结果大概率是参数调用不全导致的,该函数需要传入训练集的预测变量作为参考基准,可先尝试修正调用方式:

library(NeuralNetTools)
# 提取训练集的预测变量列(剔除标签列is_cancelled)
train_x <- train[, !names(train) %in% "is_cancelled"]
# 补充xdata参数后重新调用
all_variables <- lek.fun(nn1, xdata = train_x)
# 查看输出结果
head(all_variables, val.out = TRUE)

如果仍不符合需求,可选用以下3种成熟的实现方案:

1. 置换重要性(通用易解释,适配所有模型类型)

原理为随机打乱单个特征的取值,观测模型预测性能的下降幅度,幅度越大代表该特征对输出的影响程度越高,二分类场景可选用AUC或准确率作为性能评估指标。
代码示例:

library(caret)
library(pROC)
# 定义AUC计算函数
auc_fun <- function(model, test_x, test_y) {
  pred <- predict(model, newdata = test_x, type = "raw")
  as.numeric(roc(test_y, pred)$auc)
}
# 拆分测试集的特征与标签
test_x <- test[, !names(test) %in% "is_cancelled"]
test_y <- test$is_cancelled
# 计算原始模型的基准AUC
base_auc <- auc_fun(nn1, test_x, test_y)
# 遍历所有特征计算置换后的AUC下降值
imp_score <- sapply(names(test_x), function(f) {
  # 打乱当前特征的取值顺序
  test_x_perm <- test_x
  test_x_perm[[f]] <- sample(test_x_perm[[f]])
  # 计算置换后的模型AUC
  perm_auc <- auc_fun(nn1, test_x_perm, test_y)
  # 得分=基准AUC-置换后AUC,值越大特征越重要
  return(base_auc - perm_auc)
})
# 按重要性从高到低排序输出
sort(imp_score, decreasing = TRUE)

2. OLDEN神经网络专用重要性算法

属于NeuralNetTools包内置的专用算法,直接基于神经网络的连接权重计算特征重要性,不需要额外测试集,结果稳定性更高,还可以输出特征对结果的影响方向。
代码示例:

library(NeuralNetTools)
# 关闭绘图直接返回数值结果
olden_res <- olden(nn1, bar_plot = FALSE)
# 按重要性绝对值从高到低排序输出,正负值代表影响方向
print(olden_res[order(-abs(olden_res$importance)), ])
# 如需可视化可直接调用绘图函数
olden(nn1)

3. SHAP值(支持全局重要性排序+单样本影响解释)

SHAP是目前通用的模型可解释性工具,支持nnet模型,既可以输出全局的特征重要性排序,也可以查看单个特征对不同样本输出结果的具体影响程度。
代码示例:

library(fastshap)
# 定义预测函数,返回二分类概率输出
pred_fun <- function(model, newdata) {
  predict(model, newdata = newdata, type = "raw")
}
# 计算所有特征的SHAP值
shap_res <- fastshap::explain(nn1, 
                              X = train_x, 
                              pred_wrapper = pred_fun, 
                              nsim = 10)
# 全局重要性:按SHAP值的平均绝对值排序
global_imp <- sort(apply(abs(shap_res), 2, mean), decreasing = TRUE)
print(global_imp)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 14:30:03