PCA 具有两个功能:(1)数据降维(2)数据可视化、
本篇文章主要是简述PCA在图像方面的可视化,
下面将结合代码来讲述一下整个PCA的过程:
1.首先获得一些关于自然图像的data,例如需要用在Auto-encoder,或者CNN中的最简单的数据格式,本文我是用到了一个64*2400000,数据不算大只是用来测试。其中前边的64=8*8指的是你从一张图像上取的patch的大小(8),后边的2400000则是指共采样了多少个这样的patch。
对应代码‘patches = sampleIMAGESRAW();’ 其中sampleIMAGESRAW()与auto-encoder中的图像采样相同。
randsel = randi(size(patches,2),204,1);
display_network(patches(:,randsel)); 从所以的patches中随机选出204个patch可视化出来。
2.对获取到的数据进行均值为0处理。因为自然图像每一部分的统计特征都非常的相似,因此不需要对图像进行方法归一化,但是有文中提到,如果是对其它的图像,例如最熟悉的手写字的识别时,还是有必要进行方差归一化的。
patches = patches-repmat(mean(patches,1),size(patches,1),1);%均值为0处理
3.PCA处理,首先要清楚PCA的计算过程其实主要就是求两个东西:(1)降维后的各个向量的方向(2)原先的样本在新的方向上投影后的值
具体来说,