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

使用Scikeras KerasClassifier与sklearn cross_val_score时触发AttributeError

Scikeras KerasClassifier与sklearn cross_val_score时触发AttributeError

看起来你遇到的是Scikeras KerasClassifier和scikit-learn新版本的兼容性问题,或者是参数传递的小细节问题。让我们一步步分析和解决:

问题原因分析

从错误栈来看,问题出在scikit-learn调用is_classifier(estimator)时,尝试获取模型的sklearn标签(__sklearn_tags__),旧版本的Scikeras可能没有适配scikit-learn 1.3+之后的标签系统,导致触发AttributeError。另外也有可能是模型参数传递的方式不够规范。

解决方案

1. 升级Scikeras到最新版本

Scikeras一直在跟进scikit-learn的更新,旧版本可能和你当前的sklearn版本不兼容。执行以下命令升级:

pip install --upgrade scikeras

2. 规范模型参数的传递方式

虽然你的代码中create_model函数逻辑是正确的,但Scikeras推荐使用前缀式参数传递来给模型函数传参,这样能更好地和sklearn的接口兼容。修改你的代码如下:

首先调整模型创建函数,让它支持参数传入:

from tensorflow.keras.layers import Dense
from tensorflow.keras.models import Sequential
from sklearn.model_selection import cross_val_score
from scikeras.wrappers import KerasClassifier

def create_model(input_dim=16):
    model = Sequential([
        Dense(32, input_dim=input_dim, kernel_initializer='normal', activation='relu'),
        Dense(16, kernel_initializer='normal', activation='relu'), 
        Dense(1, kernel_initializer='normal', activation='sigmoid')
    ]) 
    model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
    return model 

然后实例化KerasClassifier时,用model__前缀传递模型的参数:

estimator = KerasClassifier(model=create_model, model__input_dim=16, epochs=100, verbose=0)

cv_scores = cross_val_score(estimator, all_features, all_classes, cv=10)
print("Mean cross-validation accuracy:", cv_scores.mean())

3. 确认输入数据的类型

虽然错误不是来自数据,但也可以快速确认all_features和all_classes是numpy数组或者pandas数据框,符合scikit-learn和Keras的输入要求(比如all_classes应该是一维的二进制标签,适配你的二分类任务)。

验证

完成上述步骤后,重新运行代码,应该就能解决这个AttributeError问题了。如果还是有问题,可以检查你的scikit-learn版本(推荐使用1.3.x或1.4.x),确保和最新版Scikeras兼容。

备注:内容来源于stack exchange,提问作者Rahul

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 14:50:28