SciPy NumPy和SciKit-learn,创建一个稀疏矩阵

时间:2012-12-06 11:05:44

标签: python matrix numpy scipy scikit-learn

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

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

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

如果我这样做

X2 = csr_matrix(X)

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

(顺便说一句,我在python,scipy,numpy,scikit ......所有内容都很新)

1 个答案:

答案 0 :(得分:13)

Scikit-learn有一个很棒的文档,有很好的教程,你真正应该阅读,然后再尝试自己发明它。 This一个是第一个阅读它的人解释了如何对文本进行分类,一步一步,this one是使用稀疏表示的文本分类的详细示例。

this部分,要特别注意他们谈论稀疏表示的部分。一般来说,如果你想使用带有线性内核的svm和大量的数据,LinearSVC(基于Liblinear)会更好。

关于你的问题 - 我确定有很多种方法可以连接两个稀疏矩阵(顺便说一句,这是你应该在google中寻找的其他方法),这里有一个,但你必须要转换从csr_matrix到coo_matrix,它是另一种稀疏矩阵:Is there an efficient way of concatenating scipy.sparse matrices?

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