6

在NLP中,特徵的維度總是非常大。例如,對於一個項目而言,特徵的維度接近2萬(p = 20,000),並且每個特徵是0-1整數,以顯示特定單詞或雙重字形是否在紙張中呈現(一篇論文是R^{p} $)中的數據點$ x \。在自然語言處理(NLP)中,如何進行有效的降維?

我知道這些特徵之間的冗餘是巨大的,所以降維是必要的。我有三個問題:

1)我有10萬個數據點(n = 10,000),每個數據點有10萬個特徵(p = 10,000)。降低維度的有效方法是什麼? R^{n \ times p} $中的矩陣$ X \如此巨大,以至於PCA(或SVD,截斷SVD都是OK,但我認爲SVD不是減少二值特徵尺寸的好方法)和Bag字(或K-means)很難直接在$ X $上進行(當然,它很稀疏)。我沒有服務器,我只是用我的電腦:-(。

2)如何判斷兩個數據點之間的相似性或距離?我認爲歐幾里得距離可能不適用於二進制特徵。 L0規範怎麼樣?你用什麼? 3)如果我想用SVM機器(或其他內核方法)進行分類,我應該使用哪個內核?

非常感謝!

+3

看起來像這個社會一個很好的問題http://stats.stackexchange.com/ – Leo 2014-11-21 00:37:38

回答

2

1)您不需要降維。如果你真的想,你可以使用L1懲罰線性分類器來減少最有用的功能。 2)經常使用餘弦相似度,或TFIDF重新調整後的向量的餘弦相似度。

3)線性支持向量機具有如此多的功能,效果最佳。

有關於如何在python這裏做分類這樣一個很好的教程:http://scikit-learn.org/dev/tutorial/text_analytics/working_with_text_data.html