使用BayesSearchCV调优TCSVM时出现iid意外关键字参数错误如何解决
错误原因
这个错误是因为iid参数早在scikit-learn 0.22版本就被官方废弃移除,当前你使用的BayesSearchCV(来自scikit-optimize库)新版本也同步移除了该参数的支持,强行传入就会触发参数不识别的报错。
降级方案失效通常是因为scikit-learn和scikit-optimize的版本没有完全匹配对应,完全不需要降级也可以解决问题,操作如下:
可行解决步骤
- 第一步:直接删除
BayesSearchCV初始化时传入的iid=True参数,该参数的原有默认逻辑(按折样本数加权计算交叉验证得分)已经是当前版本的默认行为,不需要额外指定。 - 第二步:修正参数网格的键名,你用
make_pipeline包裹了StandardScaler和SVC,管道会自动给每个步骤加前缀,SVC对应的步骤前缀是svc__(双下划线),否则会报参数不存在的错误。
修正后可运行代码
from sklearn.pipeline import make_pipeline from sklearn.preprocessing import StandardScaler from sklearn.svm import SVC from skopt import BayesSearchCV from skopt.space import Real, Integer, Categorical model2 = make_pipeline(StandardScaler(), SVC()) parameter_grid = { 'svc__C': Real(1e-5, 1e+3, prior='log-uniform'), 'svc__gamma': Real(2e-2, 2e+3, prior='log-uniform'), 'svc__degree': Integer(1, 8), 'svc__kernel': Categorical(['linear', 'poly', 'rbf']), } grid_searchdt = BayesSearchCV( estimator=model2, search_spaces=parameter_grid, n_iter=32, cv=5, random_state=0 ) grid_searchdt.fit(X_Train, Y_Train) print("Score opt =", grid_searchdt.score(X_Test, Y_Test)) print("Best_Params =", grid_searchdt.best_params_) print("Best_Score =", grid_searchdt.best_score_)
额外适配说明
如果运行仍有版本兼容问题,直接升级scikit-optimize到最新稳定版即可:pip install --upgrade scikit-optimize
如果需要实现原iid=False的效果(各折交叉验证得分算术平均),可以自定义scoring函数,指定平均方式为算术平均即可。
内容的提问来源于stack exchange,提问作者jd10031994
相关产品推荐
相关产品推荐

