7

我目前正在尝试对文本进行分类。我的数据集太大,正如这里所建议的,我需要使用稀疏矩阵。我现在的问题是,将元素添加到稀疏矩阵的正确方法是什么?例如,假设我有一个矩阵 X 这是我的输入。

X = np.random.randint(2, size=(6, 100))

现在这个矩阵 X 看起来像一个 ndarray 的 ndarray (或类似的东西)。

如果我做

X2 = csr_matrix(X)

我有稀疏矩阵,但是如何向稀疏矩阵添加另一个元素?例如这个密集元素: [1,0,0,0,1,1,1,0,...,0,1,0] 到稀疏向量,如何将它添加到稀疏输入矩阵?

(顺便说一句,我对 python、scipy、numpy、scikit ......一切都很陌生)

4

1 回答 1

14

Scikit-learn 有一个很棒的文档,里面有很棒的教程,在尝试自己发明它之前,你真的应该阅读它们。是第一个阅读它的文章,它逐步解释了如何对文本进行分类,是使用稀疏表示进行文本分类的详细示例。

在本节中,请特别注意他们谈论稀疏表示的部分。一般来说,如果你想使用带线性内核的 svm 并且数据量很大,LinearSVC(基于 Liblinear)会更好。

关于你的问题 - 我确信有很多方法可以连接两个稀疏矩阵(顺便说一句,这是你应该在谷歌中寻找的其他方法),这是一个,但你必须从 csr_matrix 转换为coo_matrix这是稀疏矩阵的另一种类型:是否有连接 scipy.sparse 矩阵的有效方法?.

编辑:当连接两个矩阵(或一个矩阵和一个数组,它是一个 1 维矩阵)时,一般的想法是连接X1.dataX2.data操纵它们的indicesand indptrs(或row在scol的情况下coo_matrix)指向正确的位置。一些稀疏表示对于特定操作更好,而对于其他操作更复杂,您应该阅读csr_matrix并查看这是否是最佳表示。但我真的敦促你从我上面发布的那些教程开始。

于 2012-12-06T11:14:09.073 回答