我正在研究python中的文本分类问题,其中无论单词是否在文本内,我都基于{0,1}构建训练数组。
array([[0., 1., 1., ..., 0., 0., 0.],
[0., 1., 1., ..., 0., 0., 0.],
[0., 1., 1., ..., 0., 0., 0.],
...,
[0., 1., 1., ..., 0., 0., 0.],
[0., 1., 1., ..., 0., 0., 0.],
[0., 1., 1., ..., 0., 0., 0.]])
由于要在其上运行SVM,因此我希望减少功能。在scikit学习中,我发现了这一点:https://scikit-learn.org/stable/modules/feature_selection.html 并将“差异阈值”设置为:
sel = VarianceThreshold(threshold=(.8 * (1 - .8)))
x_train_red = sel.fit_transform(x_train)
从缩小中,我从以下位置缩小形状:
(7808, 2000)
(7808, 97)
它只会减少每行有1条或每行有0条的futre吗?
答案 0 :(得分:1)
从文档中您可以看到方差是由p(1-p)计算的,默认的三位数或极限0.8表示将消除0方差大于0.8的任何列。因此,它会删除出现次数很少的列,因为这些单词不在您的文本中出现很多,因此它们的差异将接近0,并且通过特征选择将其消除。