在NLP中,特征的维度总是非常大。例如,对于手头的一个项目,特征的维度几乎是 20 千 (p = 20,000),每个特征都是一个 0-1 整数,以显示特定单词或双元语法是否出现在论文中(一篇论文是 \in R^{p}$ $x的数据点)。
我知道功能之间的冗余是巨大的,因此尺寸减小是必要的。我有三个问题:
1)我有1万个数据点(n = 10,000),每个数据点有1万个特征(p = 10,000)。进行降维的有效方法是什么?矩阵$X \in R^{n \times p}$ 是如此之大,以至于 PCA(或 SVD,截断的 SVD 是可以的,但我不认为 SVD 是减少二进制特征尺寸的好方法)和词袋(或 K-means)很难直接在 $X$ 上进行(当然,它是稀疏的)。我没有服务器,我只使用我的电脑:-(。
2)如何判断两个数据点之间的相似性或距离?我认为欧几里得距离可能不适用于二进制特征。L0范数怎么样?你用什么?
3) 如果我想使用 SVM 机器(或其他内核方法)进行分类,我应该使用哪个内核?
非常感谢!
1)你不需要降维。如果你真的需要,你可以使用 L1 惩罚线性分类器来减少到最有用的功能。
2)经常使用余弦相似性,或TFIDF重标向量的余弦相似性。
3) 线性 SVM 在如此多的功能下效果最好。
这里有一个关于如何在python中进行这样的分类的很好的教程:http://scikit-learn.org/dev/tutorial/text_analytics/working_with_text_data.html