У меня проблема мультиклассовой классификации для различных классификаторов (случайный лес, SVM, NN), и я использую OneVsRestClassifier, чтобы обернуть мои модели. Я хочу использовать метод интерпретируемости (LIME), который использует вероятности, сумма которых равна 1, но когда я использую функцию предиката_проэба, сумма матрицы не всегда равна 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))
Операторы печати показывают примеры для меток 1, 0 и 2 соответственно.
Выходы: [[0.164 0.836 0. ]]
, [[0.953 0.015 0. ]]
и [[0.01 0.12 0.96]]
. Последние два (как и многие другие случаи) не суммируют с 0 и не позволяют мне реализовать метод интерпретируемости.