在NLP中,特征的尺寸通常非常大。例如,对于手头的一个项目,特征的维数几乎为2万(p = 20,000),每个特征都是0-1整数,以显示在纸张中呈现的是特定字词还是二元语法(一篇论文是R ^ {p} $中的数据点$ x\)。
我知道这些功能之间的冗余非常大,因此必须减小尺寸。我有三个问题:
1)我有1万个数据点(n = 10,000),每个数据点都有1万个特征(p = 10,000)。进行尺寸缩减的有效方法是什么?矩阵$ X\in R ^ {n\timesp} $是如此之大,以至于PCA(或SVD,截短的SVD都可以,但是我认为SVD并不是减少二进制特征尺寸的好方法)和Bag的单词(或K均值)很难直接在$ X $上进行(当然,它是稀疏的)。我没有服务器,仅使用PC :-(。
2)如何判断两个数据点之间的相似度或距离?我认为欧几里得距离可能不适用于二元特征。 L0规范怎么样?你用什么?
3)如果要使用SVM机器(或其他内核方法)进行分类,应该使用哪个内核?
非常感谢!
最佳答案
1)您不需要降维。如果确实需要,可以使用L1惩罚线性分类器将其简化为最有用的功能。
2)经常使用余弦相似度,或者使用TFIDF重标向量的余弦相似度。
3)线性SVM具有如此多的功能,效果最佳。
这里有一个很好的教程,介绍如何在python中进行这样的分类:http://scikit-learn.org/dev/tutorial/text_analytics/working_with_text_data.html