稀疏矩阵与机器学习

Introduction to Sparse Matrices for Machine Learning

什么是稀疏矩阵?

大部分包含零值的矩阵称为稀疏矩阵(sparse Matrices),相对应的是大多数值非零的密集矩阵(Dense Matrices)。稀疏矩阵在机器学习领域非常常见,如计数类数据,或者one-hot encoding编码的数据等。数据的稀疏性可以通过零值的比例量化(sparsity = count zero elements / total elements)。稀疏矩阵会产生处理时间和存储空间的问题。而SciPy提供了很多高效的方法可以直接用于存储和处理稀疏矩阵。

稀疏矩阵数据处理——SciPy

SciPy中提供了多种数据结构可以有效处理稀疏矩阵,如:

Dictionary of Keys: 一个字典使用行和列索引映射出一个值

List of Lists: 每行作为一个list存储,每个list里包含column index和值

Coordinate List: 存储一个元组列表,每个元组包含行索引,列索引和值

Compressed Sparse Row (CSR) : 使用三个一维数组表示非零值,行范围和列索引。在机器学习中经常使用。

Compressed Sparse Column: 对列索引进行压缩并在行索引之前先读取

image.png

image.png

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from numpy import array
from scipy import sparse
import numpy as np
# create dense matrix
A = array([[1, 0, 0, 1, 0, 0], [0, 0, 2, 0, 0, 1], [0, 0, 0, 2, 0, 0]])
print(A)
# convert to sparse matrix (CSR method)
S = csr_matrix(A)
print(S)
# reconstruct dense matrix
B = S.todense()
print(B)
# reconstruct numpy array
C = S.toarray()
print(C)

稀疏矩阵与机器学习

python的sklearn模块很多模型可以使用sparse数据结构作为输入。

参考资料

https://machinelearningmastery.com/sparse-matrices-for-machine-learning/

https://docs.scipy.org/doc/scipy/reference/sparse.html