Вероятности проблемы мультикласса с использованием OneVsRestClassifier не равны 1 - PullRequest
0 голосов
/ 17 июня 2019

У меня проблема мультиклассовой классификации для различных классификаторов (случайный лес, 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 и не позволяют мне реализовать метод интерпретируемости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...