关键代码
param_grid_simple = {"criterion": ["squared_error","poisson"]
, 'n_estimators': [*range(20,100,5)]
, 'max_depth': [*range(10,25,2)]
, "max_features": ["log2","sqrt",16,32,64,"auto"]
, "min_impurity_decrease": [*np.arange(0,5,10)]
}
search = GridSearchCV(estimator=reg
,param_grid=param_grid_simple
,scoring = "neg_mean_squared_error"
,verbose = True
,cv = cv
,n_jobs=-1)
search.fit(X,y)
报错信息
~/anaconda3/lib/python3.8/site-packages/sklearn/ensemble/_forest.py in _parallel_build_trees(tree, forest, X, y, sample_weight, tree_idx, n_trees, verbose, class_weight, n_samples_bootstrap)
166 indices=indices)
167
--> 168 tree.fit(X, y, sample_weight=curr_sample_weight, check_input=False)
169 else:
170 tree.fit(X, y, sample_weight=sample_weight, check_input=False)
~/anaconda3/lib/python3.8/site-packages/sklearn/tree/_classes.py in fit(self, X, y, sample_weight, check_input, X_idx_sorted)
1240 """
1241
-> 1242 super().fit(
1243 X, y,
1244 sample_weight=sample_weight,
~/anaconda3/lib/python3.8/site-packages/sklearn/tree/_classes.py in fit(self, X, y, sample_weight, check_input, X_idx_sorted)
334 self.n_classes_)
335 else:
--> 336 criterion = CRITERIA_REG[self.criterion](self.n_outputs_,
337 n_samples)
338
KeyError: 'squared_error'
分析
当访问不在dict中的键时会引发KeyError错误,则 criterion 的参数 squared_error 可能不存在。由于已知有该参数值,推测可能是自己 sklearn版本问题。查询自己的 sklearn 版本为 0.23 ,而官方早已到 1.0 以上了。
解决
查询 sklearn 的官方文档看到
-
scikit-learn 1.1.dev0 -
scikit-learn 0.23.2
可以看到不同版本的criterion参数的值不同,可以考虑
- 将该值改为对应版本的值,如 ‘mse’。
- 或是直接更改 sklearn 版本。
由于官方文档中说:“mse”在 v1.0 中已弃用,并将在 1.2 版中删除,"squared_error"是等价的。因此采用了升级 sklearn 的方式。
pip install scikit-learn==1.0.1 -i https://pypi.tuna.tsinghua.edu.cn/simple
相关文章
- Python KeyError – 常用解决办法
- sklearn.ensemble.RandomForestRegressor
- 指路各个版本sklearn文档
- jupyter 更新sklearn到最新版本
|