GridSearchCV设置多评分参数时传入集合报错,求助解决
解决GridSearchCV多评分指标传入报错问题
问题出在你传入的scoring参数是**集合(set)**类型({'precision', 'recall', 'accuracy', 'f1'}),而GridSearchCV的scoring参数不支持集合,仅接受列表、元组、字典、单个字符串、可调用对象或None。
解决步骤
直接把集合替换成列表或元组即可,若需要自定义各指标的计算方式,也可以用字典形式:
1. 列表/元组形式(最直接)
将原集合的大括号{}改成方括号[](列表)或圆括号()(元组):
# 列表示例 grid_search = GridSearchCV( estimator=你的模型实例, param_grid=你的参数网格, scoring=['precision', 'recall', 'accuracy', 'f1'], # 用列表包裹 cv=5 ) # 元组示例(效果和列表一致) grid_search = GridSearchCV( estimator=你的模型实例, param_grid=你的参数网格, scoring=('precision', 'recall', 'accuracy', 'f1'), # 用元组包裹 cv=5 )
2. 字典形式(自定义指标计算规则)
如果需要指定每个指标的具体计算方式(比如分类任务中的平均策略),可以用字典映射:
scoring = { 'precision': 'precision_macro', # 宏平均精确率 'recall': 'recall_micro', # 微平均召回率 'accuracy': 'accuracy', 'f1': 'f1_weighted' # 加权F1 } grid_search = GridSearchCV( estimator=你的模型实例, param_grid=你的参数网格, scoring=scoring, cv=5, refit='accuracy' # 必须指定用哪个指标选择最优模型 )
补充说明
当传入多个评分指标时,GridSearchCV会为每个参数组合计算所有指标的得分。如果需要基于某个指标选择最优模型,记得在GridSearchCV中设置refit参数(比如上面示例的refit='accuracy'),否则无法直接通过best_estimator_获取最优模型。
内容的提问来源于stack exchange,提问作者JoaHT
相关产品推荐
相关产品推荐

