我尝试在稀疏矩阵中规范化数据(矩阵为 TF 格式)。我有一个疑问,
使用 sklearn.preprocessing.Normalizer 只是为了规范化我的矩阵是正确的吗?
规范化并使用 TF 矩阵进行聚类是否有意义?
我的矩阵是这样的:
(0, 0) 1
(7, 0) 1
(13, 0) 1
(31, 0) 4
(97, 0) 3
(99, 0) 1
我使用来自 sklearn API 的这段代码:
transformer = Normalizer().fit(sparse_matrix) # fit does nothing.
Normalizer(copy=True, norm='l2')
transformer.transform(sparse_matrix)
其中稀疏矩阵是我的 TF 矩阵。
输出是这样的:
(0, 0) 0.04822428221704121
(0, 1) 0.04822428221704121
(0, 2) 0.04822428221704121
(0, 3) 0.14467284665112365
(0, 4) 0.04822428221704121
(0, 5) 0.04822428221704121
(0, 6) 0.09644856443408242
(0, 7) 0.19289712886816485
由于这是我第一次这样做,我不想犯错。在这些新数据上,我想应用聚类来查看规范化和 TF-IDF 之间的差异。对不起,如果这个问题听起来很傻,但我试图从零开始学习。
sklearn 生成的 tfidf 矩阵已经以适当的方式进行了规范化。
通常的归一化是单位 l2 长度,以使点积、欧几里得距离和余弦返回相同的秩。从理论的角度来看(您应该始终考虑原因),这对应于规范化文档长度:一个文档的两倍于另一个文档的串联将产生相同的向量。
思考几分钟如何检查矩阵是否确实以这种方式规范化。这是一个涉及dot
的单行表达式。