为什么对一些矩阵做PCA得到的矩阵少一行?

很多时候会出现把一个N*M的矩阵做pca(对M降维)之后却得到一个M*(M-1)矩阵这样的结果。之前都是数学推导得到这个结论,但是,

今天看到一个很形象的解释:

Consider what PCA does. Put simply, PCA (as most typically run) creates a new coordinate system by (1) shifting the origin to the centroid of your data, (2) squeezes and/or stretches the axes to make them equal in length, and (3) rotates your axes into a new orientation. (For more details, see this excellent CV thread: Making sense of principal component analysis, eigenvectors & eigenvalues.) However, it doesn‘t just rotate your axes any old way. Your new X1 (the first principal component) is oriented in your data‘s direction of maximal variation. The second principal component is oriented in the direction of the next greatest amount of variation that is orthogonal to the first principal component. The remaining principal components are formed likewise.

With this in mind, let‘s examine @amoeba‘s example. Here is a data matrix with two points in a three dimensional space:

X=[121212]

Let‘s view these points in a (pseudo) three dimensional scatterplot:

So let‘s follow the steps listed above. (1) The origin of the new coordinate system will be located at (1.5,1.5,1.5). (2) The axes are already equal. (3) The first principal component will go diagonally from (0,0,0) to (3,3,3), which is the direction of greatest variation for these data. Now, the second principal component must be orthogonal to the first, and should go in the direction of the greatestremaining variation. But what direction is that? Is it from (0,0,3) to (3,3,0), or from (0,3,0) to (3,0,3), or something else? There is no remaining variation, so there cannot be any more principal components.

With N=2 data, we can fit (at most) N−1=1 principal components.

时间: 2024-10-09 08:28:26

为什么对一些矩阵做PCA得到的矩阵少一行?的相关文章

UFLDL上的ICA为什么一定要做PCA whiten

UFLDL上的ICA为什么一定要做PCA whiten Andrew Ng先生的UFLDL教程真可谓deep learning入门的首选课程.在两年前我看教程里讲ICA部分的(链接)时候,里面提到使用教程所述的ICA模型时,输入数据必须经过PCA白化操作,页面上有个TODO问为什么要这样做.以当年的我对机器学习的理解并不能解答这个问题,就只是按照教程上讲的写完了代码,后来就一直没有看过了.  今天在与人讨论无监督学习的几种损失函数的时候,提到了PCA的损失函数: max∥Wx∥2s.t.WWT=

[转载]矩阵及变换,以及矩阵在DirectX和OpenGL中的运用问题:左乘/右乘,行优先/列优先

[转载]http://www.xuebuyuan.com/882848.html (一)首先,无论dx还是opengl,所表示的矢量和矩阵都是依据线性代数中的标准定义的:“矩阵A与B的乘积矩阵C的第i行第j列的元素c(ij)等于A的第i行于B的第j列的对应元素乘积的和.”(实用数学手册,科学出版社,第二版)例如c12 = a11*b11+a12*b21+a12*b13... (二)在明确了这一点后,然后我们再看“矩阵的存储方式”,矩阵存储方式有两种,一种是“行主序(row-major order

(转)思考:矩阵及变换,以及矩阵在DirectX和OpenGL中的运用问题:左乘/右乘,行优先/列优先,...

转自:http://www.cnblogs.com/soroman/archive/2008/03/21/1115571.html 思考:矩阵及变换,以及矩阵在DirectX和OpenGL中的运用1.矩阵和线性变换:一一对应 矩阵是用来表示线性变换的一种工具,它和线性变换之间是一一对应的.考虑线性变换:a11*x1 + a12*x2 + ...+a1n*xn = x1'a21*x1 + a22*x2 + ...+a2n*xn = x2'...am1*x1 + am2*x2 + ...+amn*x

机器学习中的矩阵向量求导(三) 矩阵向量求导之微分法

在机器学习中的矩阵向量求导(二) 矩阵向量求导之定义法中,我们讨论了定义法求解矩阵向量求导的方法,但是这个方法对于比较复杂的求导式子,中间运算会很复杂,同时排列求导出的结果也很麻烦.因此我们需要其他的一些求导方法.本文我们讨论使用微分法来求解标量对向量的求导,以及标量对矩阵的求导. 本文的标量对向量的求导,以及标量对矩阵的求导使用分母布局.如果遇到其他资料求导结果不同,请先确认布局是否一样. 1. 矩阵微分 在高数里面我们学习过标量的导数和微分,他们之间有这样的关系:$df =f'(x)dx$.

矩阵及其运算(二):矩阵的运算

1.矩阵的加法 数学定义:设有两个m*n的矩阵A和B,那么矩阵A与B的和记作A+B,规定其内的元素为A,B内对应元素的和.  *矩阵加法满足交换律和结合律  *矩阵减法:A-B=A+(-B) '重载矩阵加法 Public Overloads Shared Operator +(ByVal leftMatrix As Matrix, ByVal RightMatrix As Matrix) As Matrix Dim leftRow, leftCol, rightRow, rightCol As

HDU 4965 Fast Matrix Calculation (矩阵快速幂取模----矩阵相乘满足结合律)

http://acm.hdu.edu.cn/showproblem.php?pid=4965 利用相乘的可结合性先算B*A,得到6*6的矩阵,利用矩阵快速幂取模即可水过. 1 #include<iostream> 2 #include<stdio.h> 3 #include<iostream> 4 #include<stdio.h> 5 #define N 1010 6 #define M 1010 7 #define K 6 8 using namespa

一个N*M的矩阵,找出这个矩阵中所有元素的和不小于K的面积最小的子矩阵

题目描述: 一个N*M的矩阵,找出这个矩阵中所有元素的和不小于K的面积最小的子矩阵(矩阵中元素个数为矩阵面积) 输入: 每个案例第一行三个正整数N,M<=100,表示矩阵大小,和一个整数K 接下来N行,每行M个数,表示矩阵每个元素的值 输出: 输出最小面积的值.如果出现任意矩阵的和都小于K,直接输出-1. 样例输入: 4 4 10 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 样例输出: 1 首先这个题应该是有一个动态规划的解法,不过好像复杂度也要到O(n^3lo

MATLAB矩阵处理——2.1特殊矩阵

通用的特殊矩阵 zeros函数,产生全0矩阵 ones函数,产生全1矩阵 eye函数,产生对角线为1的矩阵,当矩阵为方阵时,得到一个单位矩阵 rand函数,产生(0,1)区间均匀分布的随机矩阵 randn函数,产生均值为0,方差为1的标准正态分布随机矩阵 以zeros函数为例,说明函数调用格式 zeros(n),产生n阶方阵 zeros(m,n),产生m*n的矩阵 zeros(size(A))产生与A矩阵同样大小的矩阵 用于专门学科的特殊矩阵 (1)魔方矩阵Magic Square n阶魔方阵由

在SCIKIT中做PCA 逆运算 -- 新旧特征转换

PCA(Principal Component Analysis)是一种常用的数据分析方法.PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降维. 在Scikit中运用PCA很简单: import numpy as np from sklearn import decomposition from sklearn import datasets iris = datasets.load_iris() X = iris.data y = i