我目前正在尝试对文本进行分类。我的数据集太大了,正如这里所建议的,我需要使用稀疏矩阵。我现在的问题是,在稀疏矩阵中添加元素的正确方法是什么?举个例子,我有一个矩阵X,它是我的输入。
X = np.random.randint(2, size=(6, 100))
现在这个矩阵X看起来像ndarray的ndarray(或者类似的东西)。
如果我做
X2 = csr_matrix(X)
我有一个稀疏矩阵,但是我怎么能在稀疏矩阵中添加另一个元素呢?例如,这个稠密元素:[1,0,0,1,1,0,…,0,1,0]到稀疏向量,我如何将其添加到稀疏输入矩阵?
(顺便说一句,我对python、scipy、numpy、scikit……一切都很陌生)
Scikit learn有一个很棒的文档,其中有很棒的教程,在尝试自己发明之前,你真的应该阅读这些教程。这是第一个阅读它的人,它解释了如何逐步对文本进行分类,这是一个使用稀疏表示的文本分类的详细示例。
在本节中,要特别注意他们谈论稀疏表示的部分。一般来说,如果你想使用线性核的svm,并且你需要大量的数据,那么LinearSVC(基于Liblinear)更好。
关于你的问题-我相信有很多方法可以连接两个稀疏矩阵(顺便说一句,这是你应该在谷歌上寻找的其他方法),这里有一种,但你必须从csr_matrix转换为coo_matrix
,这是另一种类型的稀疏矩阵:有没有一种有效的方法连接scipy.sparse矩阵?。
EDIT:当连接两个矩阵(或一个矩阵和一个一维矩阵的数组)时,通常的想法是连接X1.data
和X2.data
,并操纵它们的indices
和indptr
(或在coo_matrix
的情况下为row
和col
)指向正确的位置。有些稀疏表示对于特定操作更好,而对于其他操作更复杂,您应该阅读csr_matrix
,看看这是否是最佳表示。但我真的敦促你从我上面发布的教程开始。