在我的多标签分类问题中,除了类预测之外,我还需要检索这些预测的置信度分数 .

我正在使用OneVsRestClassifer和LogisticRegression模型作为基础分类器 . 在尝试我的训练和测试集时,我注意到当没有使用概率校准时,大部分置信度得分在0.95-0.95范围内,奇怪的是,大约10%的得分非常接近于零(然后没有标签)由分类器预测) .

我已经读过LogisticRegression应该已经很好地校准了,所以有人可以解释为什么可以观察到这种行为吗?我期待概率的更平滑分布 . 这是否意味着对于OneVsRestClassifier,其逻辑回归分量的良好校准不再适用?

我决定使用sklearn中提供的CalibratedClassifierCV类,但我注意到一些概率显着降低,如下面的观察结果 . 为什么几百%的信心可以减少到50%左右?有没有人知道任何其他可能帮助我扩展这些概率的方法?

no calibration:

[0.99988209306050746], [0.99999511284844622], [0.99999995078223347], [0.99999989965720448], [0.99999986079273884], [0.99979651575446726], [0.99937347155943868]

isotonic calibration:

[0.49181127862298107], [0.62761741532720483], [0.71285392633212574], [0.74505221607398842], [0.67966429109225246], [0.47133458243199672], [0.48596255165026925]

sigmoid calibration:

[0.61111111111111116], [0.86111111111111116], [0.86111111111111116], [0.86111111111111116], [0.86111111111111116], [0.61111111111111116], [0.47222222222222227]

我目前正在使用的代码:

#Fit the classifier
clf = LogisticRegression(C=1., solver='lbfgs')
clf = CalibratedClassifierCV(clf, method='sigmoid')
clf = OneVsRestClassifier(clf)
mlb = MultiLabelBinarizer()
mlb = mlb.fit(train_labels)
train_labels = mlb.transform(train_labels)
clf.fit(train_profiles, train_labels)

#Predict probabilities:
probas = clf.predict_proba([x_test])