将一个 numpy 稀疏矩阵转储到 libsvm 后形状不一样

Posted

技术标签:

【中文标题】将一个 numpy 稀疏矩阵转储到 libsvm 后形状不一样【英文标题】:Shape not the same after dumping to libsvm a numpy sparse matrix 【发布时间】:2017-07-13 02:26:02 【问题描述】:

我有 numpy 稀疏矩阵,我以 libsvm 格式转储。 VC 是使用 CountVectorizer 创建的,其中词汇量为 85731 vc <1315689x85731 sparse matrix of type '<type 'numpy.int64'>' with 38911625 stored elements in Compressed Sparse Row format>

但是当我加载 libsvm 文件时,我发现形状不同。两列不见了: data[0] <1315689x85729 sparse matrix of type '<type 'numpy.float64'>' with 38911625 stored elements in Compressed Sparse Row format>

我不知道为什么会发生这种情况?我还将 VC 稀疏矩阵加载为 dmatrix。同样的问题 2 列消失了。

希望有更多经验的人指出问题。

谢谢

【问题讨论】:

我看到一个是整数类型,另一个是浮点类型。也许您正在某处更新您的矩阵? 啊,我不是。这是代码vectorizer = CountVectorizer(vocabulary=vocab,binary=True) vc = vectorizer.fit_transform(tr) #tr is the array of words that I feed in dump_svmlight_file(vc, train_class, train_data_file, zero_based=False) data = load_svmlight_file("data.svm") data[0] &lt;1315689x85729 sparse matrix of type '&lt;type 'numpy.float64'&gt;' with 38911625 stored elements in Compressed Sparse Row format&gt; 【参考方案1】:

我怀疑您的最后两列仅包含 0。加载 libsvm 文件时,它通常没有任何指示列数的信息。它是 col_num:val 的稀疏格式,将通过观察到的最高列数来学习最大列数。如果最后两列中只有 0,它们将在此转换中被删除。

【讨论】:

以上是关于将一个 numpy 稀疏矩阵转储到 libsvm 后形状不一样的主要内容,如果未能解决你的问题,请参考以下文章

python 转储和加载稀疏矩阵https://stackoverflow.com/questions/11129429/storing-numpy-sparse-matrix-in-hdf5-pyt

将稀疏 scipy 矩阵加载到现有的 numpy 密集矩阵中

将一个 numpy 稀疏矩阵保存到文件中

Numpy/scipy 加载巨大的稀疏矩阵以在 scikit-learn 中使用

如何将 numpy.matrix 或数组转换为 scipy 稀疏矩阵

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