如何使用RandomizedSearchCV对MultiOutputClassifier封装的模型做超参数调优
错误原因
scikit-learn的嵌套封装器参数需要遵循固定命名规则:如果要给封装器内部的子估计器传参,需要用[外层封装器的子估计器参数名]__[子估计器自身参数名]的格式,中间为双下划线。
你当前直接把随机森林的参数名传给MultiOutputClassifier外层实例,程序会认为你要给MultiOutputClassifier本身设置不存在的n_estimators等参数,因此抛出参数无效错误。
解决方法
修改你的参数字典,给所有随机森林的参数加上estimator__前缀(因为MultiOutputClassifier用来接收子估计器的参数就叫estimator),修改后的参数代码如下:
params = { 'estimator__n_estimators': [i for i in range(50,225,25)], 'estimator__max_depth' : [10,20,30,40,50], 'estimator__max_features' : ['auto', 'sqrt', 'log2'] }
修改后原有的RandomizedSearchCV调用代码无需改动,即可正常将参数传递给内部的RandomForestClassifier进行超参数搜索。
如果后续遇到类似的嵌套估计器参数设置问题,可以运行print(外层估计器实例.get_params().keys())查看所有合法可配置的参数名,确认参数命名规则。
内容的提问来源于stack exchange,提问作者Patrick Bro
相关产品推荐
相关产品推荐

