将一个 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] <1315689x85729 sparse matrix of type '<type 'numpy.float64'>' with 38911625 stored elements in Compressed Sparse Row format>
【参考方案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/scipy 加载巨大的稀疏矩阵以在 scikit-learn 中使用