目录
一、PCA(主成分分析)原理
1.PCA简介
PCA(主成分分析)为主流的一种线性降维算法。以”最小重构误差“为目标导向,通过降维(投影),用数据中相对重要(最主要)的信息表达(代替)原数据,从而达到降维的目的。
2.PCA的原理
数据符号定义
N 样本量
K 原始数据维度(传感器个数,信号个数)
D降维后数据维度(依据一定准则确定或直接定义)
Xi 去中心化后的第 i 个样本, i∈N , Xi∈R^k
Yi 降维后的第 i 个样本, i∈N, Yi∈R^D
Pj 第 j 个主成分, j∈D
X 原始样本数据矩阵, X=[x1,x2,⋯,xN] , X∈R^K×N
Y降维后数据矩阵, Y=[y1,y2,⋯,yN] , Y∈R^D×N
P主成分矩阵, P=[p1,p2,⋯,pN]T , P∈R^D×K
Cov(X,X) 数据 X 的自相关矩阵
PCA的主要思想是将原始的 K 维特征映射到 D 维上,这 D 维是全新的正交特征也被称为主成分,记为 Pj ,是在原有 K 维特征的基础上重新构造出来的。数学表达式:Y=PX
3.PCA的作用
数据降维是PCA最广为了解的作用。数据降维目的包括:通过减少数据维度降低数据处理算法的计算复杂度,很多机器学习算法的复杂度都与数据维度相关,甚至复杂度与维数呈指数级关联;将高维数据降维至低维度(2维或3维)进行可视化,这是高维数据可视化展示的常用方法;数据降噪,通过PCA处理后,将不重要维度去查可以实现降噪。
4.PCA的操作步骤
举个例子:
二、PCA的应用
PCA在特征工程、计算机视觉、人脸识别、去噪等领域有很广泛的应用。在此我们使用python进行图像降维
实验思路:
(1)分别求每个维度的平均值,然后对于所有的样例,都减去对应维度的均值,得到去中心化的数据;
(2)求协方差矩阵C:用去中心化的数据矩阵乘上它的转置,然后除以(N-1)即可,N为样本数量;
(3)求协方差的特征值和特征向量;
(4)将特征值按照从大到小排序,选择前k个,然后将其对应的k个特征向量分别作为列向量组成特征向量矩阵;
(5)将样本点从原来维度投影到选取的k个特征向量,得到低维数据;
(6)通过逆变换,重构低维数据,进行复原。
实验过程:
1.导包
from cv2 import *
from numpy import *
from PIL import Image
2.读入图像
img = Image.open("D:/Pictures/1.jpg")
3.图像转矩阵
data = img.convert("L")
data = mat(data)#np.mat和np.array的区别在于,*可以直接表示矩阵乘法,等价于np.dot()
4.去中心化
mean_x = mean(data,axis=1)#按行计算均值
data = data.astype("float64")#就是说float64和unit8不能直接相减,所以要转换下
data -= mean_x
5.协方差矩阵计算
evalue, evector = linalg.eig(cov_mat)
6.求协方差矩阵的特征值特征向量
cov_mat = 1.0/(data.shape[0]-1) * data * data.T
7.寻找主要特征值对应的特征向量
evalue_index = argsort(evalue)[::-1]#argsor是按从小到大的顺序排列,所以取反
8.输出
k = input("你想要的保留的维度:")
evalue_index = evalue_index[:int(k)]
principal_evector = evector[:,evalue_index]
9.获取原始数据在改组基上的坐标
loc = principal_evector.T.dot(data)
10.获取原始数据在本组基下的表现形式
recover_mat = principal_evector.dot(loc)
11.将矩阵数据转成图像
recove_image = recover_mat + mean_x
newImg = Image.fromarray(uint8(recove_image))
newImg.show()
降维到64维时的图像:
原图 输出
三、PCA降维的优缺点
优点:
1.通过PCA降维之后的各个主成分之间是正交的,可以消除原始数据之间相互影响的因素。
2.PCA降维的计算过程并不复杂,因为主要就是对一个协方差矩阵做特征值分解,因此实现起来较简单容易。
3.在保留大部分主要信息的前提下,起到了降维效果。
缺点:
1.主成分特征维度的含义具有模糊性,解释性差。(我们最多可以理解成主成分只是由原来的坐标维度线性相加的结果,但加出来之后它到底是啥就不好说了)
2.PCA降维的标准是选取令原数据在新坐标轴上方差最大的主成分。但方差小的特征就不一定不重要,这样的唯一标准有可能会损失一些重要信息。
3.PCA毕竟是只保留特定百分比的主成分,属于“有损压缩”,难免会损失一些信息。