1

Я занимаюсь классификацией чириканья, где каждый твит может принадлежать одному из немногих классов. Выход обучающего набора задается как вероятность принадлежности этого образца каждому классу. Например: твит № 1: C1-0.6, C2-0.4, C3-0.0 (C1, C2, C3 - классы)Scikit-learn Multiclass Naive Bayes с вероятностями для y

Я планирую использовать классификатор Naive Bayes, используя Scikit-learn. Я не мог найти подходящий метод в naive_bayes.py, который принимает вероятность для каждого класса для обучения. Мне нужен классификатор, который принимает выходную вероятность для каждого класса для набора тренировок. (т. Е. Y.shape = [n_samples, n_classes])

Как я могу обработать набор данных для применения классификатора NaiveBayes?

+1

возможно дубликат [Что использовать для данных вероятности метки мульти-класса и той же предсказания типа в sklearn?] (Http://stackoverflow.com/questions/20170191/what -to-use-for-multi-class-likely-label-data-and-same-type-prediction-in-s) –

ответ

3

Это не так просто, поскольку «вероятность классов» может иметь множество интерпретаций.

В случае NB классификатором и sklearn самый простой процедуры я вижу это:

  1. Split (дубликат) ваши образцы обучения по следующему правилу: дано (х, [p1, p2, ... , pk]) (где pi - вероятность для i-го класса) создают образцы искусственного обучения: (x, 1, p1), (x, 2, p2), ..., (x, k, pk). Таким образом, вы получаете k новых наблюдений, каждый «прикрепленный» к одному классу, а pi обрабатывается как вес , который NB (в sklearn) принимает.
  2. Тренируйте NB с fit(X,Y,sample_weights) (где X является матрица ваших x наблюдений, Y представляет собой матрицу классов из предыдущего шага, и sample_weights матрица пи из предыдущего шага.

Например, если ваш обучающий набор состоит из двух точек:

  • ([0 1], [0,6 0,4])
  • ([1 3], [0,1 0,9])

Вы преобразовать их в:

  • ([0 1], 1, 0,6)
  • ([0 1], 2, 0,4)
  • ([1 3], 1, 0,1)
  • ([1 3], 2, 0,9)

и поезд NB с

  • X = [ [0 1], [0 1], [1 3], [1 3] ]
  • Y = [ 1, 2, 1, 2 ]
  • sample_weights = [ 0.6 0.4 0.1 0.9 ]
+0

Но теперь, с вашим новым классификатором, вы получаете несколько ответов для каждого примера обучения. Как вы их совмещаете? –

+0

Вы не поняли концепцию, есть еще ** один ** классификатор, только данные обучения изменены. Вы ничего не «объединяете» - просто отслеживаете NB на чем-то, что выглядит «непоследовательным» - но это не имеет значения, он будет учиться правильно. – lejlot

+0

Все еще не понимаю. Ваш предиктор вернет 4 значения. Как вы объедините их для двух примеров, которые вас интересуют? –