使用RandomizedSearchCV调用fit时报缺少位置参数X错误如何解决?
问题原因
这是scikit-learn接口参数命名规则和Keras参数命名规则冲突导致的问题:
- scikit-learn所有评估器的
fit方法强制要求特征输入参数名为大写的X,而Keras自身的模型fit方法兼容小写x - 你调用的
RandomizedSearchCV是scikit-learn的组件,它的fit方法只会识别大写X作为特征输入参数,你传入的小写x=X_train_pca会被判定为额外参数,传递给内层Keras模型的fit方法,因此scikit-learn层面会抛出缺少位置参数X的错误。
解决方案
直接修改fit调用的参数名即可,把小写的x改成大写的X:
history = rscv_model.fit(X=X_train_pca, y=y_train, validation_split=0.1, epochs=epochs, batch_size=batch_size, callbacks=callbacks, shuffle=True, verbose=0)
额外注意点
你当前定义的超参数字典使用了model__前缀,这是scikit-learn Pipeline中指定特定步骤参数的语法,如果你的KerasRegressor没有嵌套在Pipeline中使用,需要去掉参数前缀,否则超参数无法传入模型构造函数:
parameters = {"il_neurons": il_neurons, "hl_neurons": hl_neurons, "num_hl": num_hl}
内容的提问来源于stack exchange,提问作者Grant Allan
相关产品推荐
相关产品推荐

