2014-01-07 27 views
3

在sci-kit學習的樸素貝葉斯分類器中,您可以指定先驗概率,分類器將使用它提供的概率進行計算。但我不知道如何排序先驗概率。我如何知道我給sci-kit學習的先前知識? (Naive-bayes分類器)

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會接受字典,那將會很好。也許我會像larsmans提到的那樣查看一個補丁。 – Buttons840

2

排序後的順序是classes,因此P(light bulb)=。4將使用[.6, .4]指定,因爲"door mat" < "light bulb"

+0

這與alko的答案有衝突嗎?或者LabelBinarizer按照您描述的方式排列類? – Buttons840

+2

@ Buttons840:這正是alko答案產生的順序。 –

1

深入嵌套在代碼庫中,會發生以下情況:您向fit()調用samplewise方向提供的類將轉換爲集合,然後按分類器對象(按字母或數字順序)的順序存儲。爲__init__()提供的先驗對應於按照該確切順序的類。

這是沒有記錄的。

對於進一步閱讀: