我正在处理一个类别不平衡的分类问题(5% 为 1)。我想预测类别,而不是概率。
在二元分类问题中,scikit 的 classifier.predict()
默认使用 0.5
作为阈值吗?如果不是,默认方法是什么?如果是,如何更改它?
在 scikit 中,一些分类器有 class_weight='auto'
选项,但并非所有分类器都有。使用 class_weight='auto'
时,.predict()
是否会使用实际的人口比例作为阈值?
对于不支持 class_weight
的分类器,如 MultinomialNB
,有什么方法可以实现这一点?除了使用 predict_proba()
然后自己计算类别之外。
回答:
scikit 的
classifier.predict()
默认使用 0.5 作为阈值吗?
在概率分类器中,是的。从数学角度来看,这是唯一合理的阈值,正如其他人所解释的那样。
对于不支持
class_weight
的分类器,如 MultinomialNB,有什么方法可以实现这一点?
你可以设置 class_prior
,这是每个类别 y 的先验概率 P(y)。这有效地移动了决策边界。例如:
# 最小数据集>>> X = [[1, 0], [1, 0], [0, 1]]>>> y = [0, 0, 1]# 使用从 y 学到的经验先验>>> MultinomialNB().fit(X,y).predict([1,1])array([0])# 使用自定义先验,使 1 更可能>>> MultinomialNB(class_prior=[.1, .9]).fit(X,y).predict([1,1])array([1])