2015-05-30 74 views
1

做文本分類的時候,我使用Scikit. 這裏開發一個垃圾郵件過濾器是我遵循的步驟:我需要標準化數據Scikit

擴展數據= ["This is spam" , "This is Ham" , "This is spam again"]

  1. Matrix = Countvectorizer (XData)。矩陣將包含所有文檔中每個單詞的計數。所以Matrix [i] [j]會給我計數字j在文檔中i

  2. Matrix_idfX = TFIDFVectorizer(Matrix)。它會使得分數正常化。

  3. Matrix_idfX_Select = SelectKBest(Matrix_IdfX , 500)。它將矩陣減少到500分的最好成績列

  4. Multinomial.train(Matrix_Idfx_Select)

現在我的問題,我需要在任何以上四個步驟進行正常化或標準化?如果是,那麼在哪一步之後,爲什麼?

感謝

回答

1

您可能需要分詞(詞幹或詞形還原)之前正常化的話。例如,請參閱related question

NB:你不需要因爲「TfidfVectorizer結合在一個單一的模型CountVectorizer和TfidfTransformer的所有選項」(scikit docs) 另外請注意,「雖然TF-IDF正常化往往是非常有用的,有可能是案件其中二元出現標記可能提供更好的特徵,這可以通過使用CountVectorizer的二元參數來實現,特別是一些估計量,如伯努利樸素貝葉斯明確地模擬離散佈爾隨機變量,而且很短的文本可能會有嘈雜的tf -idf值,而二進制發生信息更穩定。「 (同一文檔)

+0

如果我使用二進制那麼我應該使用bernaulli然後多項分類..右邊? – voila

+0

不,你應該使用伯努利,如果你有短文本 –