将自定义函数应用于 sklearn 中的稀疏矩阵

Apply custom functions to sparse matrix in sklearn

我正在做一个情绪分析项目。我在 sklearn 上使用词袋。我想将行规范化为:

a = [1, 0, 1, 0, 0, 0, 0, 1, 0, 1]
#a ->  4 non zero values

归一化向量应该是:

[0.25, 0.0, 0.25, 0.0, 0.0, 0.0, 0.0, 0.25, 0.0, 0.25] 

对于 b -> 8 个非零值:

b = [1, 0, 1, 1, 0, 1, 1, 1, 1, 1]

归一化向量应该是:

[0.125, 0.0, 0.125, 0.125, 0.0, 0.125, 0.125, 0.125, 0.125, 0.125]



class 'scipy.sparse.csr.csr_matrix

  (0, 2111) 1
  (0, 2812) 1
  (0, 2848) 1
   ......
   ......
  (0, 5745) 1
  (0, 5823) 1

如何对这样的矩阵应用操作?

我知道我可以使用“.toarray”方法将其转换为常规矩阵,但这会引发内存问题,矩阵有几个 Gb。

一个稀疏的csr矩阵有一个mean方法,np.mean的稀疏版本:

In [2188]: a = np.array([1, 0, 1, 0, 0, 0, 0, 1, 0, 1])
In [2189]: a1 = sparse.csr_matrix(a)
In [2190]: a1
Out[2190]: 
<1x10 sparse matrix of type '<class 'numpy.int32'>'
    with 4 stored elements in Compressed Sparse Row format>

密集归一化:

In [2191]: np.mean(a)
Out[2191]: 0.40000000000000002
In [2192]: a/np.mean(a)
Out[2192]: array([ 2.5,  0. ,  2.5,  0. ,  0. ,  0. ,  0. ,  2.5,  0. ,  2.5])

稀疏归一化:

In [2193]: a1.mean()
Out[2193]: 0.40000000000000002
In [2194]: a1/a1.mean()
Out[2194]: 
<1x10 sparse matrix of type '<class 'numpy.float64'>'
    with 4 stored elements in Compressed Sparse Row format>
In [2195]: (a1/a1.mean()).A
Out[2195]: array([[ 2.5,  0. ,  2.5,  0. ,  0. ,  0. ,  0. ,  2.5,  0. ,  2.5]])

正如我刚刚在关于稀疏点积的问题中所解释的那样,numpy 函数和方法限制了 'knowledge' 稀疏矩阵。熟悉稀疏方法和函数。如果这些还不够,那么我们可以探索替代方案。