如何在Python中降低稀疏矩阵的维度
矩阵通常由零和非零的组合组成。当一个矩阵主要由零组成时,那么这样的矩阵被称为稀疏矩阵。一个由最大非零数组成的矩阵,这样的矩阵被称为密集矩阵。稀疏矩阵在高维机器学习和深度学习问题中得到了应用。换句话说,当一个矩阵有许多系数为零时,这样的矩阵被称为稀疏矩阵。
我们遇到这种稀疏维度问题的常见领域是
- 自然语言处理–很明显,在语言模型中,文件的大部分向量元素将是0。
- 计算机视觉–有时图像会被类似的颜色(例如,可以是背景的白色)所占据,这并不能给我们带来任何有用的信息。
在这种情况下,我们不能有一个大维度的矩阵,因为它会增加问题的时间和空间复杂性,所以建议降低稀疏矩阵的维度。在这篇文章中,让我们讨论一下如何在python中降低稀疏矩阵的维度的实现。
稀疏矩阵的维数可以通过以下方式降低:首先将密集矩阵表示为压缩稀疏行表示,其中稀疏矩阵使用三个一维数组来表示非零值、行的外延和列的索引。然后,通过使用scikit-learn的TruncatedSVD,可以降低稀疏矩阵的维度。
示例:
首先从scikit-learn包中加载内置的数字数据集,使用standardscaler对每个数据点进行标准化。如图所示,使用csr_matrix以稀疏形式表示标准化矩阵。现在从sklearn导入TruncatedSVD,并指定最终输出中所需要的维数。
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import TruncatedSVD
from scipy.sparse import csr_matrix
from sklearn import datasets
from numpy import count_nonzero
# load the inbuild digits dataset
digits = datasets.load_digits()
print(digits.data)
# shape of the dense matrix
print(digits.data.shape)
# standardizing the data points
X = StandardScaler().fit_transform(digits.data)
print(X)
# representing in CSR form
X_sparse = csr_matrix(X)
print(X_sparse)
# specify the no of output features
tsvd = TruncatedSVD(n_components=10)
# apply the truncatedSVD function
X_sparse_tsvd = tsvd.fit(X_sparse).transform(X_sparse)
print(X_sparse_tsvd)
# shape of the reduced matrix
print(X_sparse_tsvd.shape)
输出:
代码:
让我们交叉验证原始维度和转换后的维度
print("Original number of features:", X.shape[1])
print("Reduced number of features:", X_sparse_tsvd.shape[1])
输出: