📜  如何减少Python中稀疏矩阵的维数?

📅  最后修改于: 2022-05-13 01:54:45.370000             🧑  作者: Mango

如何减少Python中稀疏矩阵的维数?

矩阵通常由零和非零的组合组成。当一个矩阵主要由零组成时,这样的矩阵称为稀疏矩阵。由最大非零数组成的矩阵,这样的矩阵称为稠密矩阵。稀疏矩阵在高维机器学习和深度学习问题中得到应用。换句话说,当一个矩阵的许多系数为零时,就称这样的矩阵是稀疏的。

我们遇到这种稀疏维度问题的常见领域是

  • 自然语言处理——很明显,文档的大部分向量元素在语言模型中都是 0
  • 计算机视觉– 有时图像可能被相似的颜色(例如,可以作为背景的白色)占据,这不会给我们任何有用的信息。

在这种情况下,我们无法承受大维矩阵的矩阵,因为它会增加问题的时间和空间复杂度,因此建议减少稀疏矩阵的维数。在这篇文章中,我们将讨论如何在Python中降低稀疏矩阵的维数

稀疏矩阵的维数可以通过首先将密集矩阵表示为压缩稀疏行表示来减少,其中稀疏矩阵使用三个一维数组表示非零值、行的范围和列索引。然后,通过使用 scikit-learn 的 TruncatedSVD,可以降低稀疏矩阵的维数。

例子:

首先从 scikit-learn 包中加载内置的数字数据集,使用标准缩放器标准化每个数据点。使用 csr_matrix 以稀疏形式表示标准化矩阵,如图所示。现在从 sklearn 导入 TruncatedSVD 并指定编号。最终输出所需的维度最后检查简化矩阵的形状

Python3
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)


Python3
print("Original number of features:", X.shape[1])
print("Reduced number of features:", X_sparse_tsvd.shape[1])


输出:

代码:

让我们交叉验证原始维度和转换维度

Python3

print("Original number of features:", X.shape[1])
print("Reduced number of features:", X_sparse_tsvd.shape[1])

输出: