机器学习——PCA的应用

本文详细介绍了PCA(主成分分析)的基本原理,包括其操作步骤、在数据降维中的作用以及在各种领域的应用实例。同时探讨了PCA的优点(如计算简单、正交性)和缺点(如解释性差、信息损失)。
摘要由CSDN通过智能技术生成

目录

一、PCA(主成分分析)原理

二、PCA的应用

三、PCA降维的优缺点优点:


一、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的操作步骤

举个例子:

这里有 10 个样本,每 个样例两个特征:
第一步: 分别求 x y 的平均值。然后对于所有的样本,都减去对应的均值。这里x 的均值是 1.81, y 的均值是 1.91
第二步 :求协方差矩阵。由于样本只有两个维度,可根据协方差矩阵计算公式求得:
第三步 :分解求协方差的特征值和特征向量,得:
第四步 :将特征值按照从大到小的顺序排序,选择其中最大的k 个。这里特征值只有两个,我们选择最大的那个,这里是1.28402771 。对应的特征向量是(-0.677873399, -0.735178656)T
第五步 :将样本点投影到选取的特征向量上.这里是:
FinalData(1*10) = 特征向量 (-0.677873399, -0.735178656)× DataAdjust(2*10 矩阵 )

二、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毕竟是只保留特定百分比的主成分,属于“有损压缩”,难免会损失一些信息。

【此篇博客理论知识借鉴:PCA主成分分析原理及应用总结 - 知乎】

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值