没有完全在一条直线上是因为round-off error
Ng说PCA是找一条线(就是找一个维度),使原始点到这条线的的距离最短,他把它叫做Projection Error。按PCA一般的理解是说要找到一条线,使在这条线的方差最大(每一个点投影到线上,都会又一个对应的点,也就是有一个在新维度上的取值,该维度就是一个随机变量,要使这个随机变量的方差最大)。两者是同一个意思。因为假设原来的点为$x$,投影到线上是$x'$,投影的距离为$d$,x'到$0$点的距离(就是$z$在新坐标轴上的取值)为$z$,$x$到$0$点的距离为$s$,那么有$ s ^ 2 = d ^ 2 + z ^ 2 $。所以,方差最大,就是要让Projection Error最小。前面说的是降维到1维的场景。如果降维到k维,那对应的就是在这个k维向量的协方差矩阵的
不同点:
y
值,而pca中每一个维度都是等价的,没有一个特殊的维度作为y
在mean normalization之后的协方差矩阵,可以用这种方式计算。标准的公式中的分母应该是$m-1$。可见https://en.wikipedia.org/wiki/Covariance,calculating sample covariance。
这里用SVD,也是为了求特征值和特征向量,Ng说用eig()
函数其实也可以,但是SVD更numerically stable。但在这里,两者会给出相同的结果(也就是svd没有前面说的stable优势),因为协方差矩阵一定是对称半正定矩阵(positive semi-definite)。
m个样本,每个是n维,那么$x^{(i)}$是n * 1
的向量,$X$是m * n
的矩阵。
pca中保留下来的k维,就是principal components
TODO: pca都是拿整个矩阵在做转换,我随便拿一个样本,能单独转换吗?可以去看一下scikit-learn。
因为pca是无监督的,没有用到y的信息。
In [ ]: