如何在HyperOpt中计算准确率以外的F1、精确率、召回率等评估指标
HyperOpt多评估指标计算实现方案
完全可以在HyperOpt优化过程中同时输出F1、精确率、召回率三个指标,具体修改步骤如下:
步骤1:修改目标函数的指标计算逻辑
原代码使用的cross_val_score仅支持返回单个指标,替换为cross_validate即可同时计算多个评估指标,修改后的代码如下:
from sklearn.model_selection import cross_validate def objective(space): pipe_params = {} for s in space: pipe_params[f"classifier__{s}"] = space[s] pipe.set_params(**pipe_params) # 同时指定需要计算的4个指标,二分类场景可直接使用下方写法,多分类需要替换为带average参数的指标名,例如f1_macro scoring_metrics = ['accuracy', 'f1', 'precision', 'recall'] cv_results = cross_validate(pipe, X_train, y_train, cv=10, scoring=scoring_metrics, n_jobs=-1) # 取各指标交叉验证结果的均值 accuracy = cv_results['test_accuracy'].mean() f1 = cv_results['test_f1'].mean() precision = cv_results['test_precision'].mean() recall = cv_results['test_recall'].mean() # 所有指标都加入返回结果,loss字段保持原有逻辑即可,额外添加的指标不会影响HyperOpt的优化流程 return { 'loss': 1 - accuracy, 'status': STATUS_OK, 'accuracy': accuracy, 'f1': f1, 'precision': precision, 'recall': recall }
步骤2:修改试验结果存储逻辑
在提取试验结果存入trials_df的逻辑中,新增三个指标的存储即可,修改后的代码片段如下:
for trial in trials.trials: trials_df.append({ 'classifier': cl_name, 'loss': trial['result']['loss'], 'accuracy': trial['result']['accuracy'], 'f1': trial['result']['f1'], 'precision': trial['result']['precision'], 'recall': trial['result']['recall'], 'params': trial['misc']['vals'] })
内容的提问来源于stack exchange,提问作者Mikołaj
相关产品推荐
相关产品推荐

