SciPy NumPy 和 SciKit-learn ,创建一个稀疏矩阵
Posted
技术标签:
【中文标题】SciPy NumPy 和 SciKit-learn ,创建一个稀疏矩阵【英文标题】:SciPy NumPy and SciKit-learn , create a sparse matrix 【发布时间】:2012-11-24 09:39:24 【问题描述】:我目前正在尝试对文本进行分类。我的数据集太大,建议here,我需要使用稀疏矩阵。我现在的问题是,将元素添加到稀疏矩阵的正确方法是什么?例如,假设我有一个矩阵 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 ......一切都很陌生)
【问题讨论】:
你真的应该阅读这个:scikit-learn.org/dev/auto_examples/… 这是我使用 python 的第二天,这对于第二天阅读来说有点过头了。顺便说一句,我也发现了 有些事情只是慢慢来。也许你应该花一些时间来做一些关于 Python、Numpy 和 Scipy 的教程。例如,在另一个问题的答案中,我为您指出了一些链接,而 zenpoy 给了您另一个链接。我假设您没有阅读这些链接,因为您在我回答另一个问题几分钟后发布了这个问题。 我确实读过那些,我什至做了一个有效的虚拟示例。虽然稀疏矩阵的更新不是我能找到的。如果你不知道,我不希望你回答。 @Ojtwist - 你在 sklearn 下标记了你的问题,所以这些就是你得到的答案。如果你只是问如何连接两个csr_matrix
,你会得到完全不同的答案......
【参考方案1】:
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.data
和 X2.data
并操纵它们的 indices
和indptr
s(或row
和col
,如果是coo_matrix
)指向正确的位置。一些稀疏表示对于特定操作更好,而对于其他操作更复杂,您应该阅读csr_matrix
并查看这是否是最佳表示。但我真的敦促你从我上面发布的那些教程开始。
【讨论】:
如果您想将 SVM 拟合到 真正 大数据集,那么SGDClassifier
会更好。在默认设置下,它近似于线性 SVM。
第一段链接更新:scikit-learn.org/stable/auto_examples/text/…
zenpoy 的第二个链接和@olga-botvinnik 的更新现在都坏了。试试看:scikit-learn.org/0.19/auto_examples/text/…以上是关于SciPy NumPy 和 SciKit-learn ,创建一个稀疏矩阵的主要内容,如果未能解决你的问题,请参考以下文章
numpy.polyfit 和 scipy.polyfit 有啥区别? [复制]