У меня есть данные, помеченные значениями вероятности для 4 разных классов, и я также хочу предсказать таким образом. Однако я не мог найти алгоритм обработки таких данных и прогнозирования значений вероятности для каждого класса вместо бинарского порядка. Что я могу использовать в такой проблеме?Что использовать для данных метки вероятности с несколькими классами и предсказания того же типа в sklearn?
ответ
scikit-learn классификаторы не поддерживают обучение распределений вероятностей из коробки. Обходным путем является подача образцов K раз в алгоритм обучения для классов K с использованием распределения вероятности как sample_weight
. Не все классификаторы поддерживают это, но SGDClassifier
делает и будет соответствовать модели логистической регрессии с правильными настройками.
Для примера, давайте сделаем случайный набор тренировок.
>>> X = np.random.randn(10, 6)
>>> p_pos = np.random.random_sample(10)
>>> p_pos
array([ 0.19751302, 0.01538067, 0.87723187, 0.63745719, 0.38188726,
0.62435933, 0.3706495 , 0.12011895, 0.61787941, 0.82476533])
Теперь кормить это к модели логистической регрессии с обученным синг, дважды.
>>> lr = SGDClassifier(loss="log")
>>> y = p_pos > .5
>>> lr.fit(np.vstack([X, X]), np.hstack([np.ones(10), np.zeros(10)]),
... sample_weight=np.hstack([p_pos, 1 - p_pos]))
SGDClassifier(alpha=0.0001, class_weight=None, epsilon=0.1, eta0=0.0,
fit_intercept=True, l1_ratio=0.15, learning_rate='optimal',
loss='log', n_iter=5, n_jobs=1, penalty='l2', power_t=0.5,
random_state=None, shuffle=False, verbose=0, warm_start=False)
Предыдущий пример был для двоичного LR. Multiclass LR немного сложнее. Допустим, у вас есть матрица Р n_samples
распределений вероятностей, каждый вектор-строка:
>>> P = np.abs(np.random.randn(10, 4))
>>> P /= P.sum(axis=1).reshape(-1, 1) # normalize
>>> P
array([[ 0.22411769, 0.06275884, 0.25062665, 0.46249682],
[ 0.20659542, 0.06153031, 0.03973449, 0.69213978],
[ 0.20214651, 0.084988 , 0.12751119, 0.5853543 ],
[ 0.35839192, 0.30211805, 0.01093208, 0.32855796],
[ 0.34267131, 0.07151225, 0.09413323, 0.4916832 ],
[ 0.26670351, 0.30988833, 0.22118608, 0.20222208],
[ 0.00694437, 0.68845955, 0.18413326, 0.12046281],
[ 0.34344352, 0.27397581, 0.34626692, 0.03631376],
[ 0.29315434, 0.25683875, 0.14935136, 0.30065555],
[ 0.19147437, 0.22572122, 0.57924412, 0.00356029]])
Теперь у нас есть четыре класса, так что мы должны кормить обучение, установленным на оценщик в четыре раза.
>>> n_classes = P.shape[1]
>>> X4 = np.vstack([X for i in xrange(n_classes)])
>>> y = np.arange(n_classes).repeat(10)
>>> sample_weight = P.T.ravel()
>>> lr.fit(X4, y, sample_weight=sample_weight)
SGDClassifier(alpha=0.0001, class_weight=None, epsilon=0.1, eta0=0.0,
fit_intercept=True, l1_ratio=0.15, learning_rate='optimal',
loss='log', n_iter=5, n_jobs=1, penalty='l2', power_t=0.5,
random_state=None, shuffle=False, verbose=0, warm_start=False)
- 1. улучшение предсказания в sklearn
- 2. Python SKLearn: Логистические вероятности регрессии
- 3. Отличие между несколькими исключениями того же типа
- 4. Расчет вероятности с помощью sklearn GMM
- 5. RandomForestClassifier не предсказания вероятности для всех классов
- 6. sklearn дисперсия для предсказания линейной регрессии
- 7. sklearn MeanShift другого вывода предсказания
- 8. Просмотр с использованием того же типа, что и таблица
- 9. Mysql ребенок с несколькими родителями того же типа
- 10. Общий с несколькими классами
- 11. Невозможно создать MVC отношения с несколькими элементами того же типа
- 12. Использование предсказания в Keras для предсказания 1D-массива в том же порядке, что и задано
- 13. Очень большие вероятности журналов из BayesianGaussianMyxture sklearn
- 14. sklearn GaussianNB - плохие результаты, [nan] вероятности
- 15. Работа с несколькими классами
- 16. Как использовать log4j с несколькими классами?
- 17. Непонимание понимания функции предсказания SVM sklearn
- 18. Как использовать базовые данные с несколькими контроллерами и пользовательскими классами?
- 19. Drools - таблица решений с несколькими импортированными объектами того же типа
- 20. C#, службы Windows: ServiceBase.Run с несколькими службами того же типа
- 21. Переключение с несколькими операторами для одного и того же случая
- 22. sklearn decision_function с 2 или более классами
- 23. Как получить оценку доверия классификатора для предсказания в sklearn?
- 24. Два экземпляра одного типа для одного и того же типа
- 25. Как соединить компараторы с классами одного и того же интерфейса?
- 26. Объявление свойства того же типа, что и конкретное другое свойство
- 27. Пытается использовать jquery .slideDown() с несколькими классами
- 28. Vowpal Wabbit предсказания для классификации с несколькими лейблами
- 29. Функция с несколькими типами для одного и того же параметра
- 30. Участка путаницы матрица sklearn с несколькими ярлыками
В scikit-learn нет оценки, которая учитывает распределение вероятностей как 'y'. Если вы тренируетесь на «argmax» пробных номеров, тогда должны работать логистическая регрессия, наивные байесовские и некоторые из оценок ансамбля деревьев. –
@larsmans мы не потеряем информацию, когда учимся на «argmax»? –
@AbhishekThakur: да, некоторая информация теряется. Альтернатива, о которой я только сейчас думаю, заключается в том, чтобы пробовать образец с вероятностью «p» в алгоритм обучения дважды: один раз с меткой 1 и «sample_weight» из 'p', один раз с меткой 0 и« sample_weight » от '1-p'. Однако в многоклассовом случае это может усложниться. –