Scikit-learn Multiclass Naive Bayes с вероятностями для y

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

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

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


person Kaushalya    schedule 25.11.2013    source источник


Ответы (1)


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

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

  1. Разделите (продублируйте) свои обучающие выборки в соответствии со следующим правилом: заданная (x, [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 ]
person lejlot    schedule 25.11.2013
comment
Но теперь, с вашим новым классификатором, вы получите несколько ответов на каждый обучающий пример. Как их совместить? - person Martin Böschen; 01.12.2013
comment
Вы не поняли концепцию, есть еще один классификатор, изменились только данные обучения. Вы ничего не комбинируете - просто тренируете NB на чем-то, что выглядит непоследовательным - но это не имеет значения, оно будет учиться правильно. - person lejlot; 01.12.2013
comment
Все еще не понимаю. Ваш предсказатель вернет 4 значения. Как вы их объедините для двух интересующих вас примеров? - person Martin Böschen; 01.12.2013
comment
Наивный Байес возвращает вероятности для каждого класса, а не только для некоторых значений, поэтому, исходя из базового байесовского мышления, вы выбираете класс с наибольшей вероятностью, поэтому вы берете argmax этого выходного вектора. Тем не менее в моем примере мы получаем два значения, а не четыре - я не знаю, откуда вы взяли это число. - person lejlot; 01.12.2013
comment
Предлагаемый метод представляет собой всего лишь преобразование обучающей выборки, не меняющее размерности задачи. Это была проблема классификации R ^ 2 - ›{1,2} до преобразования и после. Единственная разница в том, что каждая тренировочная точка была изменена и продублирована. Это все еще проблема R ^ 2 - ›{1,2}, решенная с помощью NB. X - это набор тренировочных точек, а не одна тренировочная точка. И Y - это набор ответов в N, а не один ответ в N ^ 4. - person lejlot; 01.12.2013
comment
@ MartinBöschen Вместо того, чтобы относить каждый тестовый пример к определенной метке, они ассоциируются с уверенностью принадлежности к каждой метке. Считайте это примером ссылки - person Kaushalya; 05.12.2013