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

Keras二分类DNN调用Yellowbrick分类报告报YellowbrickTypeError求助

报错原因
  • Yellowbrick的ClassificationReport仅支持符合Scikit-learn接口规范的分类器,会通过校验_estimator_type属性是否为classifier判断模型类型。你传入的finalDNNModel是原生Keras Sequential实例,无该属性,因此触发类型校验错误。
  • 你已经定义了适配Sklearn接口的KerasClassifier包装实例finalDNNModel_wrap,但可视化时未使用该实例,直接传入了原生Keras模型。
解决方案

方案1:使用KerasClassifier包装后的模型(推荐)

修正KerasClassifier的定义逻辑,直接使用包装后的模型完成训练、预测、可视化流程,代码示例如下:

import numpy as np
optimizer = RMSprop(0.001)
# build_fn需传入可调用对象,不可直接调用函数传返回值
def build_model():
    model = Sequential()
    model.add(Dense(32, input_dim=8, activation='relu'))
    model.add(Dense(8, activation='relu'))
    model.add(Dense(1, activation='sigmoid'))
    model.compile(loss='binary_crossentropy',optimizer=optimizer, metrics=['accuracy'])
    return model

finalDNNModel_wrap = KerasClassifier(build_fn=build_model, epochs=750, batch_size=10, verbose=0)
# 训练使用包装后的模型
finalDNNModel_wrap.fit(X_pca_train,y_train)

# 可视化时传入包装后的模型即可
classes = ["Not Parkinson", "Parkinson"]
pd.set_option('precision',2)
vizDNN = ClassificationReport(finalDNNModel_wrap, classes=classes, cmap="YlGnBu", is_fitted=True, title="DNN")
vizDNN.score(X_pca_validation, y_validation)
vizDNN.show()

方案2:给原生Keras模型添加校验属性(快速适配)

如果不想修改原有训练逻辑,直接在初始化可视化实例前,给原生Sequential模型添加两个属性即可绕过Yellowbrick的类型校验:

# 新增两行代码,给原生模型添加Sklearn分类器标识属性
finalDNNModel._estimator_type = "classifier"
finalDNNModel.classes_ = np.array([0,1])

# 原有可视化代码无需修改
classes = ["Not Parkinson", "Parkinson"]
pd.set_option('precision',2)
vizDNN = ClassificationReport(finalDNNModel,classes =  classes,cmap="YlGnBu",is_fitted=True, force_model=True, title="DNN")
vizDNN.score(X_pca_validation, y_validation)
vizDNN.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 03:45:02