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_