将自定义函数应用于 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' 稀疏矩阵。熟悉稀疏方法和函数。如果这些还不够,那么我们可以探索替代方案。
我正在做一个情绪分析项目。我在 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' 稀疏矩阵。熟悉稀疏方法和函数。如果这些还不够,那么我们可以探索替代方案。