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.
我正在处理一个高度不平衡的数据集(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.