2

我已经使用sklearn.feature_extraction.text.TfidfVectorizer对已经转换为 TF*IDF 特征向量的训练文档执行了 χ² 特征选择,默认情况下会生成归一化向量。然而,在选择了前 K 个信息量最大的特征后,由于移除了维度,向量不再被归一化(所有向量现在的长度 < 1)。

是否建议在特征选择后重新归一化特征向量?我也不太清楚 B/T 标准化和缩放的主要区别。它们是否为 SVC 等学习者提供类似的目的?

预先感谢您的友好回答!

4

1 回答 1

2

这实际上是一个很多问题。对 tf-idf 向量进行归一化的主要原因是它们的点积(SVM 在其决策函数中使用)很容易解释为余弦相似度,这是信息检索中文档向量比较的支柱。规范化确保

"hello world"             -> [1 2]
"hello hello world world" -> [2 4]

成为相同的向量,因此将文档连接到自身上不会改变决策边界,并且这两个文档之间的相似性恰好是一个(尽管sublinear_tf在向量化器构造函数中使用亚线性缩放,这不再是正确的)。

进行缩放的主要原因是避免数值不稳定问题。归一化处理了其中的大部分,因为特征已经在 [0, 1] 范围内。(我认为它也与正则化有关,但我不经常使用 SVM。)

正如您所注意到的,chi²“非规范化”特征向量,因此要回答原始问题:您可以尝试重新规范化它们。我在 scikit-learn 文档分类示例中添加 chi² 特征选择时这样做了,它对一些估计器有帮助,但对其他估计器有帮助。您也可以尝试对未归一化的 tf-idf 向量进行 chi²(在这种情况下,我建议您尝试设置sublinear_tf),然后进行缩放或归一化。

于 2013-03-06T13:21:39.400 回答