GridsearchCV,make_scorer in python,针对 class 特定 F1

GridserachCV, make_scorer in python, for class specific F1

我正在处理一个高度不平衡的数据集(class 0 中的值较多,class 1 中的值较少)。为了分析 classifier 的性能,我使用了 F1 指标。我在 scikitlearn 的 F1 函数中设置了 average = None,这是因为我想分别检查它在 class 0 和 1 上的性能,我只关心 classifier 在 class 1. value = f1_score(yTest, y_scores, average=None) value[1] gives me the required value

现在使用 gridserachcv 进行超参数调整,我按以下方式创建 F1 分数 f1_scorer = make_scorer(f1_score, average=None) 然而,这给出了一个不被 GridSearchCV(svc_clf, param_grid, cv=nfolds, error_score=0.0, scoring=f1_scorer2) 接受的数组 如何提取索引 1 处的值以用作评分参数中的指标。这是因为我想在超参数调整期间将重点放在 classifier 在 class 1 上的性能上。 我确实尝试了一些天真的写作方式 f1_scorer2[1] 等,但它说 '_PredictScorer' object is not subscriptable

如果您只关心正面 class 的 f1 分数,那么默认值 average='binary'pos_label=1 应该没问题。


如果您在其他情况下需要,您应该能够定义一个瘦包装函数:

def pos_f1_score(estimator, X, y):
    y_pred = estimator.predict(X)
    f1s = f1_score(y, y_pred, average=None)
    return f1s[1]

最后,一些常用指标已经被制作成记分器,您可以使用 scorer 的字符串调用它们;查看列表 here.