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

如何为Keras Sequential模型搭配Sklearn permutation_importance自定义roc_auc评分

问题解决方法

报错原因

  • 你的Keras MLP当前配置不符合二分类任务要求:输出层设置了4个神经元且无激活函数,输出的是维度为(样本数,4)的连续logits,和二分类0/1标签的维度、类型均不匹配
  • Sklearn默认的roc_auc评分器直接调用模型predict方法的输出做计算,无法识别连续多维度输出与二进制标签的对应关系,因此触发类型不匹配报错

修复步骤

第一步:修正模型输出层配置

二分类任务需要将输出层调整为1个神经元,搭配sigmoid激活函数,输出每个样本属于正类的概率:

model = keras.Sequential(
[
    layers.Dense(2, activation="relu", name="layer1"),
    layers.Dense(3, activation="relu", name="layer2"),
    layers.Dense(1, activation="sigmoid", name="layer3"), # 仅修改该行即可
]
)

第二步:自定义ROC-AUC评分函数

Sklearn的scoring参数支持传入自定义可调用对象,我们在函数内部自行处理预测逻辑,避免类型不匹配问题:

from sklearn.metrics import roc_auc_score

def custom_roc_auc(estimator, X, y_true):
    # 关闭预测日志避免冗余输出,获取预测概率
    y_pred = estimator.predict(X, verbose=0)
    # 去掉输出多余的维度,转为(N,)的一维数组
    y_pred = y_pred.squeeze()
    # 如果需要用阈值转二分类结果可以启用下一行,roc_auc直接用概率计算精度更高
    # y_pred = (y_pred > 0.5).astype("int32")
    return roc_auc_score(y_true, y_pred)

第三步:替换permutation_importance的scoring参数

将自定义函数传入scoring参数即可正常运行:

r = permutation_importance(model, attributes_x_test, attributes_y_test,
                           n_repeats=30, random_state=0,
                           scoring=custom_roc_auc )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 12:39:01