You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 19:24:03