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

scikit-learn堆叠集成KerasClassifier时报错该估计器应为分类器如何解决

报错核心原因是sklearn的clone方法克隆KerasClassifier实例时,不会保留手动添加的_estimator_type自定义属性,交叉验证阶段克隆后的实例丢失了该属性,导致类型校验失败。

以下是两种可行的解决方法:

方案1:使用官方维护的scikeras库(推荐)

原生keras.wrappers.scikit_learn.KerasClassifier已停止维护,兼容性差,官方已将该功能迁移到scikeras库,天然适配sklearn接口规范,无需手动添加属性。

  1. 先执行安装:pip install scikeras
  2. 替换原导入语句即可:
# 删掉原来的 from keras.wrappers.scikit_learn import KerasClassifier
from scikeras.wrappers import KerasClassifier

删除原来手动添加的model_nn._estimator_type = "classifier"代码行,直接运行即可通过类型校验。

方案2:自定义包装类固定属性(无需安装新依赖)

如果不想新增依赖,可以通过自定义类继承KerasClassifier和ClassifierMixin,将_estimator_type设为类属性,避免克隆时丢失:

from sklearn.base import ClassifierMixin

# 自定义兼容类
class SklearnCompatibleKerasClassifier(KerasClassifier, ClassifierMixin):
    _estimator_type = "classifier"

# 初始化时用自定义类替换原生KerasClassifier
model_nn = SklearnCompatibleKerasClassifier(build_fn=create_model, epochs=50, batch_size=5, verbose=0)

修改后无需再手动给实例添加_estimator_type属性,即可正常通过sklearn的类型校验。

如果需要临时快速验证,可以先将cross_val_score的n_jobs参数从-1改为1,同时将model_nn._estimator_type = "classifier"移到stacking()函数内添加nn模型到level0列表的代码前,可临时规避克隆丢失属性的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 00:54:03