2012-10-12 83 views
3

我寫了一個基於Naive Bayes algorithm的分類程序,它很好地將一個文檔分類到一個類別。但是,我的情況已發生變化,我現在需要將文檔分爲N個類別。多類別文檔分類

基本上我需要從'垃圾郵件'/'非垃圾郵件'分類轉換爲'垃圾郵件和撲克','垃圾郵件和其他','非垃圾郵件'。

我想到了2個選項:

  1. 調整算法,並獲得通過的概率排序的可能類別。這可以工作,但對我來說這似乎不正確。你怎麼看 ?

  2. 使用完全不同的算法,在這種情況下,您會推薦哪一種?

預先感謝您的反饋:)

+0

您可以使用k近鄰算法來在多個類別,HTTP文件進行分類:// en.wikipedia.org/wiki/K-nearest_neighbor_algorithm – Radi

+0

我來看看,謝謝! –

回答

4

沒有理由不將樸素貝葉斯拓展到多個類別 - 實際上它是一個簡單的分類器,自然延伸到多類別的情況。如果您的類別「垃圾郵件和撲克」,「垃圾郵件和某些東西」,「不是垃圾郵件」完全不相交,您可以將其視爲單一的三種分類任務:如果您的類別c_1,c_2和c_3具有先驗概率p_1,p_2和p_3以及可能性(實例給定類的概率)l_1,l_2和l_3,則該類的後驗概率與其先前時間成正比(其可能性正比於正整數p_1 * l_1 + p_2 * l_2 + p_3 * L_3)。對於任何數量的類都是如此。

但是,我懷疑你可能會在實踐中發現更好的性能,首先判斷它是否是垃圾郵件,然後確定垃圾郵件的類型(兩階段分類過程)。

如果您碰巧有機會訪問Tom Mitchell的「機器學習」一書,那麼這本書很容易理解。

+1

這是我的問題,我的類別不完全脫節。我可以有「垃圾郵件和撲克」和「非垃圾郵件和撲克」:/ –

+2

如果您的類別不是不相交的,並且沿着多個獨立的軸線,那麼爲每個軸設置分類器並從它們的組合輸出中提出複合標籤:即垃圾郵件與非垃圾郵件,撲克與非撲克等等。 –

1

由於你的類不是不相交的,所以這是多標籤分類。 scikit-learn軟件包中有support for that使用簡單的one-versus-rest規則(又名二進制相關性):對於垃圾郵件/非垃圾郵件,撲克/非撲克等每個決策,都要對單獨的分類器進行培訓,並且預測時間,每個都在測試樣本上獨立運行。

更智能的方法包括classifier chains

(聲明:我寫sklearn多標籤分類代碼的部分,所以這不是公正的意見)

+0

何,優秀的,我會看看,謝謝! –