2014-01-07 2 views
3

В наивных байесовских классификаторах sci-kit learn вы можете указать предыдущие вероятности, и классификатор будет использовать предоставленные вероятности в его расчетах. Но я не знаю, как должны быть упорядочены предыдущие вероятности.Как я узнаю, что раньше я даю научиться sci-kit? (Классификаторы наивных заливов.)

from sklearn.naive_bayes import BernoulliNB 
data = [[0], [1]] 
classes = ['light bulb', 'door mat'] 
classes.shuffle() # This simulates getting classes from a complex source. 
classifier = BernoulliNB(class_prior=[0, 1]) # Here we provide prior probabilities. 
classifier.fit(data, classes) 

В приведенном выше коде, как узнать, какой класс предполагается на 100% раньше? Нужно ли мне рассматривать порядок классов в данных перед определением предыдущих вероятностей?

Мне также было бы интересно узнать, где это задокументировано.

ответ

3

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

from sklearn.preprocessing import LabelBinarizer 
labelbin = LabelBinarizer() 
labelbin.fit_transform(classes) 

Тогда labelbin.classes_ содержит в результате классов для ваших целевых данных (classes), в порядке, соответствующий одному из настоятелей.

+3

Это не документированы для наивного байесовского, но это соглашение, по всей scikit-узнать, что в классе параметры работают как это. Патч приветствуется. –

+2

Так что мне нужно сделать небольшую дополнительную работу, чтобы получить правильность заказа class_prior. Было бы неплохо, если бы class_prior принял словарь. Может быть, я загляну в патч, как упоминают лерсманы. – Buttons840

2

Порядок является то, что classes после сортировки, так что P (light bulb) =. 4 будет указано с помощью [.6, .4], потому что "door mat" < "light bulb".

+0

Означает ли это конфликт с ответом Алко? Или LabelBinarizer упорядочивает классы так, как вы описали? – Buttons840

+2

@ Buttons840: это именно тот порядок, который дает ответ alko. –

1

Глубоко вложенное в базу кода происходит следующее: классы, которые вы предоставляете выборочно для вызова fit(), превращаются в набор, отсортированный, а затем сохраненный в этом порядке в объекте классификатора (в алфавитном или цифровом порядке). Приоритеты, предусмотренные для __init__(), соответствуют классам в этом точном порядке.

Видимо, это недокументировано.

Для дальнейшего чтения:

Смежные вопросы