如何将矩阵变成稀疏矩阵并将其原型化
how to turn a matrix into a sparse matrix and protobuf it
我有一个包含 16 列和 100,000 行的数据集,我正在尝试为矩阵分解训练做准备。我正在使用以下代码将其拆分并将其变成稀疏矩阵。
X=data.drop([data.columns[0]],axis='columns')
y=data[[1]]
X=lil_matrix(100000,15).astype('float32')
y=np.array(y).astype('float32')
X
但是当我 运行 它时,我得到这个错误:
<1x1 sparse matrix of type '' with 1 stored
elements in LInked List format> .
当我尝试将它插入 training/testing split 时,它给我带来了更多错误:
Found input variables with inconsistent numbers of samples: [1,
100000]
您的 linked notebook
正在创建一个 'blank' 稀疏矩阵,并根据它从 csv
.
读取的数据设置选定元素
一个简单的例子:
In [565]: from scipy import sparse
In [566]: M = sparse.lil_matrix((10,5), dtype=float)
In [567]: M
Out[567]:
<10x5 sparse matrix of type '<class 'numpy.float64'>'
with 0 stored elements in LInked List format>
请注意,我使用 (10,5)
来指定矩阵形状。 () 事!这就是我强调阅读 docs
的原因。在 link 中,相关行是:
X = lil_matrix((lines, columns)).astype('float32')
现在我可以设置几个元素,就像我设置密集数组一样:
In [568]: M[1,2] = 12.3
In [569]: M[3,1] = 1.1
In [570]: M
Out[570]:
<10x5 sparse matrix of type '<class 'numpy.float64'>'
with 2 stored elements in LInked List format>
我可以使用 toarray
将矩阵显示为密集数组(不要尝试使用大尺寸)。
In [571]: M.toarray()
Out[571]:
array([[ 0. , 0. , 0. , 0. , 0. ],
[ 0. , 0. , 12.3, 0. , 0. ],
[ 0. , 0. , 0. , 0. , 0. ],
[ 0. , 1.1, 0. , 0. , 0. ],
[ 0. , 0. , 0. , 0. , 0. ],
[ 0. , 0. , 0. , 0. , 0. ],
[ 0. , 0. , 0. , 0. , 0. ],
[ 0. , 0. , 0. , 0. , 0. ],
[ 0. , 0. , 0. , 0. , 0. ],
[ 0. , 0. , 0. , 0. , 0. ]])
如果我省略 (),它会生成一个只有一个元素(第一个数字)的 (1,1) 矩阵。
In [572]: sparse.lil_matrix(10,5)
Out[572]:
<1x1 sparse matrix of type '<class 'numpy.int64'>'
with 1 stored elements in LInked List format>
In [573]: _.A
Out[573]: array([[10]], dtype=int64)
再看看你的代码。你设置 X
值两次,一旦它是一个数据帧。第二次是这个糟糕的 lil
初始化。第二次没有利用第一次X
.
X=data.drop([data.columns[0]],axis='columns')
...
X=lil_matrix(100000,15).astype('float32')
我有一个包含 16 列和 100,000 行的数据集,我正在尝试为矩阵分解训练做准备。我正在使用以下代码将其拆分并将其变成稀疏矩阵。
X=data.drop([data.columns[0]],axis='columns')
y=data[[1]]
X=lil_matrix(100000,15).astype('float32')
y=np.array(y).astype('float32')
X
但是当我 运行 它时,我得到这个错误:
<1x1 sparse matrix of type '' with 1 stored elements in LInked List format> .
当我尝试将它插入 training/testing split 时,它给我带来了更多错误:
Found input variables with inconsistent numbers of samples: [1, 100000]
您的 linked notebook
正在创建一个 'blank' 稀疏矩阵,并根据它从 csv
.
一个简单的例子:
In [565]: from scipy import sparse
In [566]: M = sparse.lil_matrix((10,5), dtype=float)
In [567]: M
Out[567]:
<10x5 sparse matrix of type '<class 'numpy.float64'>'
with 0 stored elements in LInked List format>
请注意,我使用 (10,5)
来指定矩阵形状。 () 事!这就是我强调阅读 docs
的原因。在 link 中,相关行是:
X = lil_matrix((lines, columns)).astype('float32')
现在我可以设置几个元素,就像我设置密集数组一样:
In [568]: M[1,2] = 12.3
In [569]: M[3,1] = 1.1
In [570]: M
Out[570]:
<10x5 sparse matrix of type '<class 'numpy.float64'>'
with 2 stored elements in LInked List format>
我可以使用 toarray
将矩阵显示为密集数组(不要尝试使用大尺寸)。
In [571]: M.toarray()
Out[571]:
array([[ 0. , 0. , 0. , 0. , 0. ],
[ 0. , 0. , 12.3, 0. , 0. ],
[ 0. , 0. , 0. , 0. , 0. ],
[ 0. , 1.1, 0. , 0. , 0. ],
[ 0. , 0. , 0. , 0. , 0. ],
[ 0. , 0. , 0. , 0. , 0. ],
[ 0. , 0. , 0. , 0. , 0. ],
[ 0. , 0. , 0. , 0. , 0. ],
[ 0. , 0. , 0. , 0. , 0. ],
[ 0. , 0. , 0. , 0. , 0. ]])
如果我省略 (),它会生成一个只有一个元素(第一个数字)的 (1,1) 矩阵。
In [572]: sparse.lil_matrix(10,5)
Out[572]:
<1x1 sparse matrix of type '<class 'numpy.int64'>'
with 1 stored elements in LInked List format>
In [573]: _.A
Out[573]: array([[10]], dtype=int64)
再看看你的代码。你设置 X
值两次,一旦它是一个数据帧。第二次是这个糟糕的 lil
初始化。第二次没有利用第一次X
.
X=data.drop([data.columns[0]],axis='columns')
...
X=lil_matrix(100000,15).astype('float32')