据我所知,常设仲裁法院一般采取以下步骤:
X_reduced是X降为k维。
但是,当我查看SKLearn的实现时,我发现了这一行代码:
U *= S[:self.n_components_]这个U作为转换X返回,为什么使用S而不是X仍然有效?
发布于 2017-11-24 16:25:53
你对1-2的理解是不正确的。主成分分析既可以通过寻找协方差矩阵的特征向量来实现,也可以通过将奇异值分解应用于中心数据矩阵来实现。你不能同时做协方差和SVD。在实践中,SVD方法是可取的,因为协方差矩阵的计算放大了与条件差的矩阵相关的数值问题。SKLearn使用它;下面是方法的核心:
self.mean_ = np.mean(X, axis=0)
X -= self.mean_
U, S, V = linalg.svd(X, full_matrices=False)SVD将X表示为U @ S @ V.T (使用@表示矩阵乘法,并假定实值数据)。这里V由协方差矩阵的特征向量组成,并且满足正交关系V.T @ V = I。
就特征向量V而言,变换后的数据为X @ V。但是,由于X等于U @ S @ V.T,所以把两边乘以V,就会导致X @ V等于U @ S。因此,U @ S是转换后的数据。
用对角的S相乘比用X相乘容易,X是任意的稠密矩阵。
有关更多信息,请参见SVD与PCA的关系。如何利用SVD进行PCA?
https://stackoverflow.com/questions/47476209
复制相似问题