# PCA-Principal-Components-Analysis
PCA 是一项常用的在高维数据中寻找特征的降维技术,目前主要用于图片识别和图片压缩领域中。本文主要讲两个部分:
## 一、PCA 的算法原理
首先需要知道几个相关的数学概念,这是我们进行 PCA 分析的基础
标准差(Standard Deviation)、方差(Variance)、协方差(Covariance)、特征向量(eigenvectors)、特征值(eigenvalues)
### 1.1 Standard Deviation(标准差)
标准差就是用来描述一组数据与平均值得偏离程度,反映了一组数据的波动情况,平均值数学表达公式如下:
![](https://www.writebug.com/myres/static/uploads/2022/1/1/02208b63c160bd6f4129ef9c0e2d3362.writebug)
标准差的表达公式如下:
![](https://www.writebug.com/myres/static/uploads/2022/1/1/723a29fcae50c5e1111b503bbe78134b.writebug)
需要注意的是分母是选择 `n` 还是 `n-1`,取决于你选取的数据是整个完整数据还是数据中的一部分
### 1.2 Variance(方差)
Variance is another measure of the spread of data in a data set. In fact it is almost identical to the standard deviation.(方差是数据集中数据分布的另一种度量。实际上,它几乎与标准差相同)
方差的数学表达公式如下:
![](https://www.writebug.com/myres/static/uploads/2022/1/1/2abe2436bb95291a24ff0ce9afb79b6a.writebug)
### 1.3 Covariance(协方差)
标准差与方差只针对一维数据进行衡量的指标,协方差是针对二维数据或者是更高维的数据进行的衡量指标,主要用来表示多维度与平均值的偏离程度。
协方差的数学表达公式如下:
![](https://www.writebug.com/myres/static/uploads/2022/1/1/26e11ac925394ac271fc4ca04d2e9e1e.writebug)
### 1.4 The covariance Matrix(协方差矩阵)
协方差矩阵主要是用于当数据的维度超过 3 或者更多的时候,我们可以通过一个矩阵来存储各个维度的协方差,这个矩阵就被称为“协方差矩阵”。
用数学方法来表示一个 N 为数据的协方差矩阵可以表示为:
![](https://www.writebug.com/myres/static/uploads/2022/1/1/3075aa68fce07b70a93d988baba552b1.writebug)
现在假设我们有一个三个维度的数据,使用一个协方差矩阵将这三维数据的协方差表示如下:
![](https://www.writebug.com/myres/static/uploads/2022/1/1/9e1e1dd358b8c3717b391e2084a2f86d.writebug)
设置小练习如下:
请计算一下两个数据的协方差矩阵:
x:(10,39,19,23,28)
y:(43,13,32,21,20)
以及 x:(1,-1,4) y:(2,1,3) z:(1,3,-1,)
请计算这两个数据的协方差矩阵
### 1.5 Eigenvectors(特征向量)
在矩阵论中,我们可以这样去理解特征值和特征向量,一个矩阵由一个变换到另一个矩阵,Aα=λα,其中 α 称为矩阵 A 的一个特征向量,λ 称为矩阵 A 的一个特征值。特征向量确定了矩阵变换的方向,特征值确定了矩阵变换的比例。
在协方差矩阵中,协方差矩阵的特征向量又反应了什么物理意义呢?
协方差矩阵的特征向量代表的意思是方差最大的数据所在的方向。在 n 维数据空间中,第一特征向量指向的是数据方差最大的方向,第二特征向量是与第一特征向量垂直的
数据方差最大的方向,第三特征向量是与第二特征向量垂直的数据方差最大的方向,以此类推。
通常我们还需要对特征向量进行标准化处理,即求模长,然后将向量中每一个元素除以该模长,即为标准化处理。
我们使用 python 来计算这样一个二维数据的协方差矩阵以及该协方差矩阵的特征值和特征向量,作为我们学习的一个简单的例子
数据如下:
![](https://www.writebug.com/myres/static/uploads/2022/1/1/cbc2bd5828b3b2bc83e7400e33a93937.writebug)
首先计算 x 维和 y 维的平均值,代码如下:
```Python
x=[2.5,0.5,2.2,1.9,3.1,2.3,2,1,1.5,1.1]
y=[2.4,0.7,2.9,2.2,3.0,2.7,1.6,1.1,1.6,0.9]
means_X=round(float(sum(x)/(len(x))),4)
means_Y=round(float(sum(y)/(len(y))),4)
print("x 维的平均值为:",means_X)
print("y 维的平均值为:",means_Y)
```
用初始数据中 x 维和 y 维的每一个数字减去平均值,得到
然后计算协方差:
```python
update_x=[]
update_y=[]
for i in range(0,len(x)):
var=x[i]-means_X
update_x.append(var)
i=i+1
print(update_x)
for i in range(0,len(x)):
var=y[i]-means_Y
update_y.append(var)
i=i+1
print(update_y)
# 将两个数组纵向合并
c=np.vstack((update_x,update_y))
print(c)
# 调用numpy包计算协方差
cov_c=np.cov(c)
cov_st=np.array(cov_c)
print(type(cov_st))
```
再计算相应的特征值和特征向量:
```python
A,B=np.linalg.eig(cov_st)
print("该协方差矩阵的特征值为:",A)
print("该协方差矩阵的特征向量为:",B)
```
代码运行结果如下图所示:
![](https://www.writebug.com/myres/static/uploads/2022/1/1/bb306ddcb60406949420229d6c7c2fdb.writebug)
### 1.6 Choosing components and forming a feature vector(选择主成分并生成特征向量)
一个协方差矩阵有着不同的特征值与特征向量,事实上最高特征值的对应的特征向量就是这个数据集的主成分。
通常来说,一旦协方差矩阵的特征值和特征向量被计算出来了之后,就是按照特征值的大小从高到低依次排列。特征值的大小确定了主成分的重要性。
*主成分分析的基本原理就是:选择特征值较大的作为主成分,从而进行降维。比如:一开始你的数据集是 N 维的,在进行了协方差矩阵的特征值计算后,
你得到了 N 个特征值和与这些特征值相对应的特征向量。然后在主成分分析时,你选取了前 P 个较大的特征值,如此一来,就将原来 N 维的数据降维到只有 P 维。这样就起到了降维的效果了。*
### 1.7 Deriving the new data set(选择特征向量生成新的数据集【这个新的数据集也就是降维后的数据集】)
计算新生成的数据集的公式如下:
![](https://www.writebug.com/myres/static/uploads/2022/1/1/6c5fbdcc5048ade73e65d6c7a70149f7.writebug)
其中 rowFeatureVector 是由模式矢量作为列组成的矩阵的转置,因此它的行就是原来的模式矢量,而且对应最大特征值的特征矢量在该矩阵的最上一行。rowdataAdjust 是每一维数据减去均值后,所组成矩阵的转置,即数据项目在每一列中,每一行是一维,对我们的样本来说即是,第一行为 x 维上数据,第二行为 y 维上的数据
正是由于特征向量是两两正交的,那么我们就可以使用任何的特征向量来将原始数据变换到正交的这些坐标轴上。
我们还以前文提过的简单例子来表示。在前文中,我们已经计算出协方差矩阵的特征值及特征向量,接下来,我们选取一个较大的特征值对应的特征向量将原始数据降到一维。做法是:将较大的特征值对应的特征向量转置然后乘以原始数据集,这样就得到新的降维后的一维数据。
# 二、PCA 的人脸识别算法(基于 Python 实现)
## 一、数据集的说明及相关函数的实现
我们使用的是 ORL 官方数据集,可以从一下网址下载到 [ORL 下载链接](http://www.cl.cam.ac.uk/Research/DTG/attarchive/pub/data/att_faces.tar.Z)
下载后的数据集是这个样子的:
![](https://www.writebug.com/myres/static/uploads/2022/1/1/12e03f121fe5e00bbeef19c43ff315a1.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/1/1/e4489e8b3be4dc6445754b8d3a63ecf8.writebug)
该数据集表示的是一共有 40 个人的人脸图像,其中每一个人有 10 张人脸图像。相应的 PGM 文件为说明。
我们需要用到的第三方包有 numpy 主要用于科学计算,cv 主要用于图像处理,matplotlib 主要用于训练结果展示
首先定
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
PCA是一项常用的在高维数据中寻找特征的降维技术,目前主要用于图片识别和图片压缩领域中。本文主要讲两个部分: 一、PCA的算法原理。 二、PCA的人脸识别算法
资源推荐
资源详情
资源评论
收起资源包目录
基于Python PCA人脸识别算法的原理及实现【100012246】 (822个子文件)
10.jpg 3KB
6.jpg 3KB
4.jpg 3KB
2.jpg 3KB
4.jpg 3KB
2.jpg 3KB
5.jpg 3KB
5.jpg 3KB
9.jpg 3KB
7.jpg 3KB
8.jpg 3KB
3.jpg 3KB
2.jpg 3KB
1.jpg 3KB
4.jpg 3KB
5.jpg 3KB
10.jpg 3KB
5.jpg 3KB
8.jpg 3KB
6.jpg 3KB
4.jpg 3KB
1.jpg 3KB
6.jpg 3KB
2.jpg 3KB
7.jpg 3KB
10.jpg 3KB
2.jpg 3KB
3.jpg 3KB
5.jpg 3KB
3.jpg 2KB
4.jpg 2KB
4.jpg 2KB
5.jpg 2KB
5.jpg 2KB
8.jpg 2KB
7.jpg 2KB
4.jpg 2KB
5.jpg 2KB
10.jpg 2KB
6.jpg 2KB
1.jpg 2KB
8.jpg 2KB
6.jpg 2KB
4.jpg 2KB
4.jpg 2KB
1.jpg 2KB
2.jpg 2KB
3.jpg 2KB
1.jpg 2KB
5.jpg 2KB
10.jpg 2KB
3.jpg 2KB
8.jpg 2KB
5.jpg 2KB
9.jpg 2KB
7.jpg 2KB
9.jpg 2KB
8.jpg 2KB
1.jpg 2KB
5.jpg 2KB
7.jpg 2KB
2.jpg 2KB
9.jpg 2KB
8.jpg 2KB
9.jpg 2KB
1.jpg 2KB
9.jpg 2KB
5.jpg 2KB
3.jpg 2KB
9.jpg 2KB
3.jpg 2KB
10.jpg 2KB
10.jpg 2KB
10.jpg 2KB
2.jpg 2KB
7.jpg 2KB
4.jpg 2KB
8.jpg 2KB
10.jpg 2KB
7.jpg 2KB
7.jpg 2KB
9.jpg 2KB
3.jpg 2KB
2.jpg 2KB
10.jpg 2KB
1.jpg 2KB
6.jpg 2KB
7.jpg 2KB
7.jpg 2KB
1.jpg 2KB
10.jpg 2KB
9.jpg 2KB
3.jpg 2KB
9.jpg 2KB
8.jpg 2KB
3.jpg 2KB
6.jpg 2KB
4.jpg 2KB
7.jpg 2KB
9.jpg 2KB
共 822 条
- 1
- 2
- 3
- 4
- 5
- 6
- 9
资源评论
- m0_589450822023-06-20资源很赞,希望多一些这类资源。
神仙别闹
- 粉丝: 2674
- 资源: 7640
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- pta题库答案c语言之排序4统计工龄.zip
- pta题库答案c语言之树结构7堆中的路径.zip
- pta题库答案c语言之树结构3TreeTraversalsAgain.zip
- pta题库答案c语言之树结构2ListLeaves.zip
- pta题库答案c语言之树结构1树的同构.zip
- 基于C++实现民航飞行与地图简易管理系统可执行程序+说明+详细注释.zip
- pta题库答案c语言之复杂度1最大子列和问题.zip
- 三维装箱问题(Three-Dimensional Bin Packing Problem,3D-BPP)是一个经典的组合优化问题
- 以下是一些关于Linux线程同步的基本概念和方法.txt
- 以下是一个简化的示例,它使用pygame库来模拟烟花动画的框架.txt
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功