scikit学习网格交叉验证返回错误的平均值

2024-07-01 08:18:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用GridCV跨k个折叠进行交叉验证,以调整我的超参数。在我的结果属性“cv\u results\中,平均结果应该是单个折叠的平均值,这是错误的。以下是我的代码:

gscv = GridSearchCV(n_jobs=n_jobs,cv=train_test_iterable, estimator=pipeline, param_grid=param_grid, 
                verbose=10, scoring=['accuracy', 'precision','recall','f1'], refit='f1', 
                    return_train_score=return_train_score, error_score=error_score,
                   )
gscv.fit(X,Y)
gscv.cv_results_

cv\结果\包含以下json(显示为表格)

    mean_test_f1    split0_test_f1  split1_test_f1  Actual Mean
    0.934310796     0.935603198     0.933665455     0.934634326
    0.931279716     0.908430118     0.942689316     0.925559717
    0.927683609     0.912005672     0.935512149     0.923758911
    0.680908006     0.741198823     0.650802701     0.696000762
    0.680908006     0.741198823     0.650802701     0.696000762
    0.646005028     0.684483208     0.626791532     0.65563737
    0.840273248     0.847484083     0.836672627     0.842078355
    0.837160828     0.847484083     0.832006068     0.839745075
    0.833637        0.842109375     0.829406448     0.835757911

您可以看到上面的内容:“mean\u test\u f1”不是两次“split0\u test\u f1”、“split1\u test\u f1”的平均值。实际平均值是最后一列。你知道吗

注:F1为F1得分。你知道吗

有没有人面临类似的问题?你知道吗


Tags: testreturnparamjobstrainerrormeanresults
2条回答

尝试在GridSearchCV(...)中设置iid=False,然后进行比较。你知道吗

根据文件:

iid : boolean, default=True

    If True, the data is assumed to be identically distributed across 
    the folds, and the loss minimized is the total loss per sample,
    and not the mean loss across the folds.

因此,当iid为真(默认情况下),测试分数的平均值包括指定的权重here in source code

    _store('test_%s' % scorer_name, test_scores[scorer_name],
                   splits=True, rank=True,
                   weights=test_sample_counts if iid else None)

请注意,培训分数不受其影响,因此还要交叉检查培训分数的平均值。你知道吗

我认为你看到的是一个加权平均数,而不是一个直接平均数。你知道吗

相关问题 更多 >

    热门问题