現有大概1500左右的高維數據,要根據文本進行分類,已經做好的tf-idf,由於維度太高,用樸素貝葉斯分類是計算出來的概率實在是太小了,擠在一堆分不出來。如何改進才能使得NBC有效呢?已經嘗試取了對數,可是還是分不出來。能夠用tf-idf進行篩選么?如何篩選和如何降維?如果用PCA降維效果如何?


1.我覺得你是不是可以先做一下聚類分析(比如Kmeans,Hierarchical clustering),然後再分別研究下每個cluster。

2.你的feature不一定都有用,可以用random forest先算下feature importance,選重要的feature。

3.降維不一定要一定要PCA,也可以嘗試下supervised的方法,比如PLS。

4.樸素貝葉斯效果一般也說不上太好,如果你覺得模型的解釋性重要,可以考慮邏輯回歸+L1或L2懲罰。如果你覺得精度重要,那gradient boost tree是比較好的選擇。

1500維算不算『維度太高』,要看你樣本量有多少。樣本足夠多,1500維其實沒啥問題。

把你會用的模型都試一遍,沒必要非得用樸素貝葉斯。


你最終目的是什麼?提高分類的精確度么?如果是這樣樸素貝葉斯似乎在大多數情況下都是效果比較弱的分類器(當然具體問題具體分析)。一般比較多見是上SVM,效果都是有一定保證的。

至於你說的降維,你不妨先用一些簡單的特徵選擇方法(例如卡方,互信息之類的)。沒必要一下子就pca啥的,pca涉及矩陣運算,不太適合於大數據量。不過1500維在大多數情況下其實也不算大數據

關鍵還是要看你的樣本有多少,各個類怎麼分布,比如中文100億文本的二分類,如果90億文本正例10億文本反例那麼df(頻次)低於100的詞我看就可以不要了,這樣100萬的詞大概可以過濾到10萬左右吧。然後再用卡方檢驗選出前n(N取你能接受的最大值)個跟結果最相關的詞做feature。

不過你一共才1500個詞,估計樣本不多,直接做卡方檢驗吧。
關鍵在於你有多少樣本量,脫離這個,你的幾條問題都無法回答。


這個緯度不算太多,如果樣本量足夠。,如果想單純降緯,可以用下,pca或者簡單算下卡方,具體要看目前的效果


推薦閱讀:
相关文章