来自 Sk-learn CountVectorizer 的高稀疏矩阵的含义
meaning of High sparsity matrix from Sk-learn CountVectorizer
我使用 sk-learn.CountVectorizer() 创建向量矩阵,发现它有 57% 填充了 0。在一些在线案例中,他们的稀疏矩阵只有 30% 被零填充。我想知道稀疏程度的影响。在稀疏矩阵中减少零点是好是坏还是没有区别?我们可以对这一观察提出什么意见?
事实上,30% 甚至 57% 的零 并不 意味着高稀疏性。因此,在您的情况下,忽略稀疏性这一事实并将矩阵视为密集矩阵就足够安全了。
真正高的稀疏度大约是 99.99% 的零。它发生在推荐系统等问题中,当有数千甚至数百万个项目时,但每个用户只与其中的几个交互。另一种情况是当我们有非常短的文本(例如推文或对话轮)和非常大的词汇量(也许,甚至是多语言的)。
如果特征矩阵具有非常高的稀疏性,则意味着:
- 如果您想有效地存储矩阵或使用它进行快速计算,您可能需要使用明确支持
scipy
的稀疏矩阵的算法。
- 特征space可能是高维的,并且可能某些特征彼此高度相关。因此,您可能会发现降维有助于使您的模型更易于处理和更好地泛化。您可以使用矩阵分解技术(例如 PCA)或神经嵌入层来实现这种降维。或者你可以使用预训练的词嵌入并以某种方式聚合它们来表示你的文档。
一般来说,表示文档的最佳方式取决于您要解决的最终问题。对于某些问题(例如,具有大型训练集的文本分类),高维稀疏表示可能是最佳的;对于其他人(例如,小文本的相似性或带有小标签训练集的文本分类),低维密集表示会更好。
我使用 sk-learn.CountVectorizer() 创建向量矩阵,发现它有 57% 填充了 0。在一些在线案例中,他们的稀疏矩阵只有 30% 被零填充。我想知道稀疏程度的影响。在稀疏矩阵中减少零点是好是坏还是没有区别?我们可以对这一观察提出什么意见?
事实上,30% 甚至 57% 的零 并不 意味着高稀疏性。因此,在您的情况下,忽略稀疏性这一事实并将矩阵视为密集矩阵就足够安全了。
真正高的稀疏度大约是 99.99% 的零。它发生在推荐系统等问题中,当有数千甚至数百万个项目时,但每个用户只与其中的几个交互。另一种情况是当我们有非常短的文本(例如推文或对话轮)和非常大的词汇量(也许,甚至是多语言的)。
如果特征矩阵具有非常高的稀疏性,则意味着:
- 如果您想有效地存储矩阵或使用它进行快速计算,您可能需要使用明确支持
scipy
的稀疏矩阵的算法。 - 特征space可能是高维的,并且可能某些特征彼此高度相关。因此,您可能会发现降维有助于使您的模型更易于处理和更好地泛化。您可以使用矩阵分解技术(例如 PCA)或神经嵌入层来实现这种降维。或者你可以使用预训练的词嵌入并以某种方式聚合它们来表示你的文档。
一般来说,表示文档的最佳方式取决于您要解决的最终问题。对于某些问题(例如,具有大型训练集的文本分类),高维稀疏表示可能是最佳的;对于其他人(例如,小文本的相似性或带有小标签训练集的文本分类),低维密集表示会更好。