Sklearn - Как предсказать вероятность для всех целевых меток

У меня есть набор данных с целевой переменной, которая может иметь 7 разных меток. Каждый образец в моем тренировочном наборе имеет только одну метку для целевой переменной.

Для каждой выборки я хочу рассчитать вероятность для каждой целевой метки. Таким образом, мой прогноз будет состоять из 7 вероятностей для каждой строки.

На веб-сайте sklearn я читал о классификации по нескольким меткам, но, похоже, это не то, чего я хочу.

Я попробовал следующий код, но это дает мне только одну классификацию на образец.

from sklearn.multiclass import OneVsRestClassifier
clf = OneVsRestClassifier(DecisionTreeClassifier())
clf.fit(X_train, y_train)
pred = clf.predict(X_test)

У кого-нибудь есть совет по этому поводу? Спасибо!

2 ответа

Решение

Вы можете сделать это, просто удалив OneVsRestClassifer и используя predict_proba метод DecisionTreeClassifier, Вы можете сделать следующее:

clf = DecisionTreeClassifier()
clf.fit(X_train, y_train)
pred = clf.predict_proba(X_test)

Это даст вам вероятность для каждого из 7 возможных классов.

Надеюсь, это поможет!

Вы можете попробовать использовать scikit-multilearn - расширение sklearn, которое обрабатывает многослойную классификацию. Если ваши метки не слишком коррелированы, вы можете обучить один классификатор для каждой метки и получить все прогнозы - попробуйте (после pip install scikit-multilearn):

from skmultilearn.problem_transform import BinaryRelevance    
classifier = BinaryRelevance(classifier = DecisionTreeClassifier())

# train
classifier.fit(X_train, y_train)

# predict
predictions = classifier.predict(X_test)

Предсказания будут содержать разреженную матрицу размера (n_samples, n_labels) в вашем случае - n_labels = 7, каждый столбец содержит прогноз для метки для всех выборок.

В случае, если ваши метки коррелированы, вам могут потребоваться более сложные методы для классификации нескольких меток.

Отказ от ответственности: я автор scikit-multilearn, не стесняйтесь задавать больше вопросов.

Если вы настаиваете на использовании OneVsRestClassifer, тогда вы также можете позвонить predict_proba(X_test) поскольку это поддерживается OneVsRestClassifer также.

Например:

from sklearn.multiclass import OneVsRestClassifier
clf = OneVsRestClassifier(DecisionTreeClassifier())
clf.fit(X_train, y_train)
pred = clf.predict_proba(X_test)

Порядок меток, для которых вы получите результат, можно найти в:

clf.classes_
Другие вопросы по тегам