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

标签 python matrix numpy scipy scikit-learn

我目前正在尝试对文本进行分类。我的数据集太大,按照建议 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 有很棒的文档和很棒的教程,您在尝试自己发明之前应该阅读这些教程。 This第一个阅读它的人会逐步解释如何对文本进行分类,并且 this one是使用稀疏表示进行文本分类的详细示例。

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

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

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

关于python - SciPy NumPy 和 SciKit-learn ,创建一个稀疏矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13742266/

相关文章:

c - 如何正确使用数组函数

python - 用 numpy 进行矢量化基数排序——它能打败 np.sort 吗?

python - 如何检查数字溢出而不在 Python 中收到警告?

python - 给定 python 中的阈值,有效地删除彼此接近的数组

python - 如何从列表中获取特定索引左侧的 x 项,包括 0 项

python - 在 sqlalchemy 中进行自然连接

c - 使用 strcmp 在数组中查找匹配项

java - 使用 vector 数组创建矩阵数组的简单方法

python - Selenium - Python,找不到元素

Python TypeError 与逻辑迭代数据值