使用OneVsRestClassifier的多类问题的概率不等于1

时间:2019-06-17 12:31:24

标签: python probability multiclass-classification

我对各种分类器(随机森林,SVM,NN)有一个多类分类问题,并且我使用OneVsRestClassifier来包装我的模型。我想使用一种解释性方法(LIME),该方法利用了总和为1的概率,但是当我使用函数predict_proba时,矩阵的总和并不总是总和为1。

这是一个多类分类问题。我检查了我的原始数据,二值化的值以及训练/测试数据,以检查是否存在类重叠。每个实例都有一个不同的标签(100、010或001)。

x = pd.read_pickle(r"x.pkl").values
y = pd.read_pickle(r"y.pkl").values

#  binarize labels for multilabel auc calculations
y = label_binarize(y, classes=[0, 1, 2])
n_classes = y.shape[1]

#  create train and test sets, stratified
x_train, x_test, y_train, y_test = train_test_split(x, y, stratify=y, test_size = 0.20, random_state=5)

rfclassifier = RandomForestClassifier(n_estimators=100, random_state=5, criterion = 'gini', bootstrap = True)
classifier = OneVsRestClassifier(rfclassifier)
classifier.fit(x_train, y_train)
prediction = classifier.predict(x_test)
probability = classifier.predict_proba(x_test)

#check probabilities
print(classifier.predict_proba([x_test[0]]).round(3))
print(classifier.predict_proba([x_test[1]]).round(3))
print(classifier.predict_proba([x_test[20]]).round(3))

print语句分别显示标签1、0和2的示例。 输出为[[0.164 0.836 0. ]][[0.953 0.015 0. ]][[0.01 0.12 0.96]]。最后两个(以及许多其他实例)的总和不为0,这使我无法实现可解释性方法。

0 个答案:

没有答案