在我的多标签分类问题中,除了类预测之外,我还需要检索这些预测的置信度分数。
我使用OneVsRestClassifer和LogisticRegression模型作为基本分类器。在尝试我的训练和测试集时,我注意到当没有使用概率校准时,大部分置信度得分在0.95-0.95范围内,奇怪的是,大约10%的得分非常接近于零(然后没有标签)由分类器预测)。
我已经读过LogisticRegression应该已经很好地校准了,所以有人可以解释为什么可以观察到这种行为吗?我期待概率的更平滑分布。这是否意味着对于OneVsRestClassifier,其逻辑回归分量的良好校准不再适用?
我决定使用sklearn中提供的CalibratedClassifierCV类,但我注意到根据以下观察,一些概率显着下降。为什么几百%的信心可以减少到50%左右?有没有人知道任何其他方法可能有助于我扩展这些概率?
无校准:
[0.99988209306050746], [0.99999511284844622], [0.99999995078223347], [0.99999989965720448], [0.99999986079273884], [0.99979651575446726], [0.99937347155943868]
等渗校准:
[0.49181127862298107], [0.62761741532720483], [0.71285392633212574], [0.74505221607398842], [0.67966429109225246], [0.47133458243199672], [0.48596255165026925]
sigmoid校准:
[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])