运行以下代码:
from sklearn.decomposition import TruncatedSVDimport numpy as npX = np.matrix('1 2 3 4 5; 3 4 5 6 7; 1 1 1 1 1; 2 3 4 5 6; 2 3 4 5 6')svd = TruncatedSVD(n_components=2, n_iter=7, random_state=42)svd.fit(X)print(svd.singular_values_)
产生的结果是:
[19.32338258 1.26762989]
我期望矩阵的每一行都能被降维到大小2,但实际上是整个矩阵被降维到了大小2。TruncatedSVD可以用来将数据集的每一行降维到大小2,而不是整个矩阵降维到大小2吗?
回答:
打印的是奇异值
而不是奇异向量
。由于n_components
=2,因此有两个奇异值
是合适的。
要获得转换后的输出,可以使用
svd.transform(X)
或者将其变换回原始空间
svd.inverse_transform(X)
最后一个步骤是必要的,以便在原始矩阵和转换后的矩阵之间进行任何统计比较。