我已经使用sklearn.feature_extraction.text.TfidfVectorizer对已经转换为TF * IDF特征向量的训练文档执行了χ2特征选择,默认情况下会生成归一化向量。然而,在选择前K个最具信息性的特征之后,由于去除了维度,所以向量不再被归一化(所有向量现在具有长度<1)。
在功能选择后重新规范化特征向量是否可取?我也不太清楚B / T归一化和缩放的主要区别。它们是否为SVC等学习者提供类似的用途?
提前感谢您的回答!
答案 0 :(得分:2)
这实际上是一个很多问题。对tf-idf向量进行归一化的主要原因是它们的点积(由SVM在其决策函数中使用)很容易解释为cosine similarities,它是信息检索中文档向量比较的主要部分。规范化确保
"hello world" -> [1 2]
"hello hello world world" -> [2 4]
成为相同的向量,因此将文档连接到自身不会改变决策边界,并且这两个文档之间的相似性恰好是一个(尽管在向量化构造函数中使用了次线性缩放,sublinear_tf
,这不是更长的真实)。
进行缩放的主要原因是avoid numerical instability issues。归一化处理大部分因素,因为特征已经在[0,1]范围内。 (我认为它也与正则化有关,但我不经常使用SVM。)
正如您所注意到的,chi²“非规范化”特征向量,因此要回答原始问题:您可以尝试重新规范化它们。我在为scikit-learn文档分类示例添加chi²特征选择时做到了这一点,并且它帮助了一些估算器并且与其他人一起受到伤害。您也可以尝试在非标准化的tf-idf向量上执行chi²(在这种情况下,我建议您尝试设置sublinear_tf
)并在之后进行缩放或标准化。