我有一个不平衡的二进制数据集,大多数是1个标签(6到1)。
我使用class_weight =' balance'运行GridSearchCV和LinearSVC模型。优化' C'参数。由于占多数,我认为我需要一个评分函数,比如' metrics.average_precision_score'有一点不同:它会根据0标签而不是1来计算得分。
答案 0 :(得分:2)
我最终在Scikit评分函数文档中找到了答案。
可以根据负面标签计算得分,通过将其重新定义为"正面标签" (仅限得分)。例如:
from sklearn.model_selection import GridSearchCV
from sklearn.metrics import precision_score, make scorer
# here the scoring function is created. make_scorer passes the pos_label=0
# argument to sklearn.metrics.precision_score() to create the desired function.
neg_precision = make_scorer(precision_score, pos_label=0)
# some random C parameters for completion
params = {'C': [0.01, 0.03, 0.1, 0.3, 1, 3, 10]}
clf = GridSearchCV(LinearSVC(class_weight='balanced'), cv=10,param_grid=params, scoring=neg_precision)
clf.fit(X, y)
我个人决定使用得分=' f1_macro'。这计算了阳性标签的f1-得分和阴性标签的f1-得分的非加权平均值。这产生了我追求的结果。