分享

[pca]PrincipalComponentAnalysis(PCA)

 dachuanz 2018-04-23

篇一 : PrincipalComponentAnalysis(PCA)

matlab的Feature Transformation提供了1个有关主成分分析的介绍和例子。

PCA的介绍

多元统计分析中普遍存在的困难中,有1个困难是多元数据的可视化。matlab的plot可以显示2个变量之间的关系,plot3和surf可以显示三维的不同。但是当有多于三个变量时,要可视化变量之间的关系就很困难了。

幸运的是,在一组多变量的数据中,很多变量常常是一起变动的。1个原因是很多变量是同1个驱动影响的的结果。在很多系统中,只有少数几个这样的驱动,但是多余的仪器使我们测量了很多的系统变量。当这种情况发生之际,你需要处理的就是冗余的信息。而你可以通过用1个简单的新变量代替这组变量来简化此问题。

主成分分析是1个定量的严格的可以起到简化作用的方法。它产生一组叫做主成分的新变量,每1个主成分是原始变量的线性组合。所有主成分是相互正交的,从而不存在冗余的信息。所有主成分形成了原始数据空间的一组正交基。

但是有无数种方式来创建一组正交基,那主成分正交基有什么特殊之处呢?

第一主成分是数据空间的1个轴。当你把各观察值投影到这个轴时,结果会形成1个新变量,这个变量的方差是所有可选的轴中最大的。

第二主成分是空间的另1个轴,它垂直于第1个轴。投影数据到这个轴上将得到另一组变量,此变量的方差是所有可选的轴中最大的。

最后得到的所有主成分个数是与原始变量相同的,但是通常前几个主成分方差的和占到了原始数据总方差的80%以上。通过绘制这组新变量,研究者常常会更深入的了解产生原始数据的驱动力。

在matlab中,可以使用princomp函数来找到主成分,通过使用此函数,你需要用到测量的原始数据。然而,如果你缺少这些数据,但是有这些数据的样本自相关或协方差矩阵,你可以通过使用pcacov函数来做主成分分析。

主成分分析的实例

计算成分考虑1个例子,它使用了衡量美国3二十九个城市生活质量的九个指标:气候、住房、健康、犯罪率、交通、教育、艺术、娱乐和经济。对于各指标,越高表示越好,如高的犯罪指标表示低的犯罪率。

先从cities.mat中加载数据

>> load cities

>> whos

Name Size Bytes Class Attributes

categories 9x14 252 char

names 329x43 28294 char

ratings 329x9 23688 double

cities.mat中包含了三个变量:

categories--1个包含各指标名字的字符串矩阵

names--1个包含3二十九个城市名字的字符串矩阵

ratings--329行9列的数据矩阵

为快速对ratings数据有个直观的印象,可以使用盒图绘制出数据来

boxplot(ratings,'orientation','horizontal','labels',categories)

PrincipalComponentAnalysis(PCA)

可以注意到大体上艺术和住房的指标要比犯罪和气候的指标有更大的变异性。

通常你会考虑绘制各对原始变量,但这将有36对变量图。而主成分分析或许会降低你需要考虑的变量个数。

有时对原始数据计算主成分是可以的,这在各变量是相同的单位时是很合适的。但是当变量单位不同或不同列数据的方差相差很大时,先对数据做标准化是更好的。

可以通过除以各列标准差来标准化数据,如下

stdr = std(ratings);

sr = ratings./repmat(stdr,329,1);

这样就为找主成分做好准备了。

[coefs,scores,variances,t2] =princomp(sr);

下面各部分解释了princomp函数的输出。

Component Coeffcientscoefs包含了产生主成分的原始变量线性组合的系数,它常被称为loadings。它是9X9的矩阵,前3个主成分的系数向量为

>> c3 = coefs(:,1:3)

c3 =

0.2064 -0.2178 0.6900

0.3565 -0.2506 0.2082

0.4602 0.2995 0.0073

0.2813 -0.3553 -0.1851

0.3512 0.1796 -0.1464

0.2753 0.4834 -0.2297

0.4631 0.1948 0.0265

0.3279 -0.3845 0.0509

0.1354 -0.4713 -0.6073

可以看到在第一主成分中最大的系数是第3个和第7个,即健康和艺术。此主成分的所有系数都是正的。

主成分通常是单位长且正交的

I = c3'*c3

I =

1.0000 -0.0000 -0.0000

-0.0000 1.0000 -0.0000

-0.0000 -0.0000 1.0000

Component Scoresscores包含了原始数据在被主成分定义的新坐标系统中的坐标,它是和原始数据矩阵同大小的。

绘制scores的前两列可以展示原始数据投影到前2个主成分的新数据。princomp函数计算的scores具有零均值。

plot(scores(:,1),scores(:,2),'+')

xlabel('1st Principal Component')

ylabel('2nd Principal Component')

PrincipalComponentAnalysis(PCA)

注意到上图中右边的离群点。函数gname可以用于标出这些离群点,调用gname时传入1个string矩阵,它包含了各点的标签,如下

gname(names)

移动鼠标在右半部分的点点击,当你点击各点之际,在点上会标记names中对应的字符串,如下

PrincipalComponentAnalysis(PCA)

从上面的标记,发现这些离散点是美国一些人口比较多的城市,它们明显与其他数据不同,所以它们可能需要被分离开。为移除这些数据,首先识别这些数据的行,方法如下

1.关闭上面的figure

2.重绘plot

plot(scores(:,1),scores(:,2),'+')

xlabel('1st Principal Component');

ylabel('2nd Principal Component');

3.运行gname函数,如输入参数

4.标记离散点,标记自动为这些数据的行数

PrincipalComponentAnalysis(PCA)

然后创建1个包含这些点的变量

metro = [43 65 179 213 234 270 314];

names(metro,:)

ans =

Boston, MA

Chicago, IL

Los Angeles, Long Beach, CA

New York, NY

Philadelphia, PA-NJ

San Francisco, CA

Washington, DC-MD-VA

然后移除这些行

rsubset = ratings;

nsubset = names;

nsubset(metro,:) = [];

rsubset(metro,:) = [];

size(rsubset)

ans =

322 9

Component Variancesvariances是1个包含了主成分方差的向量,scores的每一列的方差即为variances对应的项

variances

variances =

3.4083

1.2140

1.1415

0.9209

0.7533

0.6306

0.4930

0.3180

0.1204

你可以很容易的计算所有差异性占到百分比

percent_explained = 100*variances/sum(variances)

percent_explained =

37.8699

13.4886

12.6831

10.2324

8.3698

7.0062

5.4783

3.5338

1.3378

使用pareto函数可以以图的方式显示此百分比

pareto(percent_explained)

xlabel('Principal Component')

ylabel('Variance Explained (%)')

(]PrincipalComponentAnalysis(PCA)

显示的figure中可以看到第一主成分明显比第二主成分要高很多,但它只解释了不到40%的方差,所以需要使用更多的成分。可以看到前3个主成分解释了三分之二的方差,所以这3个成分可以作为1个理想的方式来降低维数。

Hotelling's T2t2是1个衡量各观测值离数据中心距离的统计量,这是1个找出数据中极值点的有效分析方法。

[st2, index] = sort(t2,'descend'); % Sort in descendingorder.

extreme = index(1)

extreme =

213

names(extreme,:)

ans =

New York, NY

这个极值点是不奇怪的,因为Vew York的ratings是离美国城镇平均值是最远的。

结果可视化使用biplot函数可以帮助我们可视化各变量的主成分的系数和各观察值的主成分scores。如下,

biplot(coefs(:,1:2), 'scores',scores(:,1:2),...

'varlabels',categories);

axis([-.26 1 -.51 .51]);

PrincipalComponentAnalysis(PCA)

上图中,九个变量以向量的形式呈现出来,向量的方向和长度表示了各变量对2个主成分的贡献。例如,对于第一主成分,对所有九个变量的系数都是正值。对于第二主成分,变量教育、健康、艺术和交通是正的贡献,其他五个是负的贡献。这表明此成分在不同城市间是有区别的:大的值的变量、小的值的变量和负值的变量。

上图中变量标签有的时候会很拥挤,可以在绘图时在varlabels参数中忽略一些,或在figure的编辑模式下选中并移动它们。可以使用Tools下的DataCursors功能查看图中的信息

PrincipalComponentAnalysis(PCA)

biplot函数也可以用于绘制三维的信息

biplot(coefs(:,1:3), 'scores',scores(:,1:3),...

'obslabels',names);

axis([-.26 1 -.51 .51 -.61 .81]);

view([30 40]);

PrincipalComponentAnalysis(PCA)

篇二 : PCA算法

主成分分析简介

? Principal Component Analysis(PCA) ? 主成分分析(Principal Component Analysis, 简称PCA)是一种常用的基于变量协方差矩 阵对信息进行处理、压缩和抽提的有效方 法。

基于PCA算法的人脸识别

? PCA方法由于其在降维和特征提取方面的 有效性,在人脸识别领域得到了广泛 的应用。 ? PCA方法的基本原理是:利用K-L变换抽取人 脸的主要成分,构成特征脸空间,识别时 将测试图像投影到此空间,得到一组投影 系数,通过与各个人脸图像比较进行识别。

? 利用特征脸法进行人脸识别的过程由训练 阶段和识别阶段两个阶段组成 ? 其具体步骤如下:

训练阶段

? 第一步:假设训练集有200个样本,由灰度图组成,每个 样本大小为M*N

? 写出训练样本矩阵:

x ? ?x1 , x2 ,..., x200 ?

T

? 其中向量xi为由第i个图像的每一列向量堆叠成一列的MN 维列向量,即把矩阵向量化,如下图所示:

训练阶段

? 如:第i个图像矩阵为

?1 2 3 ? ?4 5 6? ? ? ?7 8 9 ? ? ?

?1 ? ?4? ? ? ?7 ? ? ? ?2? ?5 ? ? ? ?8 ? ?3? ? ? ?6 ? ?9 ? ? ?

? 则xi为

训练阶段

? 第二步:计算平均脸

1 计算训练图片的平均脸: ? ? 200

i ? 200 i ?1

?x

i

训练阶段

? 第三步:计算差值脸

计算每一张人脸与平均脸的差值

d i ? xi ? ?? i ? ?????????? ?

训练阶段

? 第四步:构建协方差矩阵

1 200 1 T T C? ? d i d i ? 200 AA 200 i ?1

A ? ?d1? d 2 ,..., d 200 ?

训练阶段

? 第五步:求协方差矩阵的特征值和特征向 量,构造特征脸空间 协方差矩阵的维数为MN*MN,考虑其维数 较大,计算量比较大,所以采用奇异值分 解(SingularValue Decomposition ,SVD)定 理,通过求解AT A 的特征值和特征向量来获 得AAT的特征值和特征向量。

?i

训练阶段

? 求出 AT A的特征值 ? i 及其正交归一化特征向 量 i ? 根据特征值的贡献率选取前p个最大特征向量 及其对应的特征向量 ? 贡献率是指选取的特征值的和与占所有特征 值的和比,即:

?

??

i ?1 i ? 200 i ?1

??

i? p

i

??

?a

i

训练阶段

? 一般取 a ? 99% 即使训练样本在前p个特征向量集 上的投影有99%的能量 求出原协方差矩阵的特征向量

ui ? 1

?i

Avi (i ? 1,2,..., p )

则“特征脸”空间为:

w ? ?u1 , u 2 ,...,u p ?

训练阶段

? 第六步 ? 将每一幅人脸与平均脸的差值脸矢量投影到 “特征脸”空间,即

? i ? wT d i ?i ? 1,2,..., 200 ?

识别阶段

? 第一步:将待识别的人脸图像 ? 与平均脸的差 值脸投影到特征空间,得到其特征向量表示:

? ? w ?? ? ? ?

? T

识别阶段

?

第二步:定义阈值

1 ? ? max ? i ? ? j , i, j ? 1,2,..., 200 2 i, j

?

?

识别阶段

? 第三步:采用欧式距离来计算 ? ?与每个人脸的距 离 ?i

? i ? ?i ? ?

2

? 2

?i ? 1,2,..., 200 ?

识别阶段

? 为了区分人脸和非人脸,还需要计算原始图像 ? 与由特征脸空间重建的图像 ? f 之间的距离

?

? ? ? ? ?f

2

2

? 其中:

? f ? w? ? ?

?

识别阶段

? 根据以下规则对人脸进行分类: ? 1)若? ? ? ,则输入图像不是人脸图像; ? ? 2)若? ? ? ,且 ?i , i ? ? 则输入图像包含未 知人脸; ? 3)若? ? ? ,且 ?i , i ? ? 则输入图像为库中 ? 第k个人的人脸。

2D-PCA

? 2D-PCA是在基本PCA算法上的改进,主要 不同是协方差矩阵构造方法不同,选取前P 个最大特征值和特征向量也有所不同。

训练阶段

?

?s

1设训练样本集合为:

i j

? R , i ? 1,2,..., N , J ? 1,2,..., K

m?n

?

? 其中: i表示第i个人,即类别数, j表示第i个人的第j幅图像 N表示识别的人数, K表示每个人包含K幅图像, M表示样本总数且M=NK

训练阶段

? 2 计算所有训练样本的平均图像

1 S? M

?? S

i ?1 j ?1

N

K

i j

训练阶段

? 3计算样本的协方差矩阵:

1 G? M

?? ?S

N K i ?1 j ?1

i j

?S

? ?S

T

i j

?S

?

训练阶段

? 4求出协方差矩阵的特征值,选取其中最大 特征值 u1...u p 对应的正交特征向量 X 1... X p 作为投影空间。 用投影矩阵Y的总离散度作为准则函数J (U)来衡量投影空间U的优劣:

J ?U ? ? tr?Su ?

训练阶段

? Su是投影矩阵Y的协方差矩阵, ?Su ? 是 S u 的迹, tr 且:

SU ? U E ?x ? E ?x ?? ?x ? E ?x ?? U

T T

?

?

? 选取的特征向量为

U ? ?X 1 , X 2 ,..., X p ? ? arg max ?J ?U ??, X i X j ? 0; i ? j; i, j ? 1,2,..., p

T

训练阶段

? 5 训练样本 ?s

投影得到:

Y j ? [ S j X i ,..., S j X p ] ? [Y j (1),..., Y j ( p)] ? R m? p

i i i i i

i j

, i ? 1,2,..., N , j ? 1,2,..., K

?向

X 1 ... X p 空间

识别阶段

? 1测试样本 W ? R m*n 向 X ... X 空间投影后得到样本 i i Yt 和主成分分量 Y j (1),..., Y j ( p) : W的特征矩阵

1 p

Yt ? [Y j (1),..., Y j ? p ?] ? WX 1 ,..., WX p

i i

?

?

识别阶段

? 2根据测试样本投影特征矩阵与所有训练样本投 影特征矩阵之间的最小距离来判断测试样本所属 的类别。定义如下的距离度量准则:

p Y j , Yt ? ? Y j ?n ? ? Yt ?n ?

i i n ?1

2 i

?

?

p

2

? 其中 Y j ?n? ? Yt ?n? 表示两个特征向量之间的欧 氏距离。

识别阶段

? 3若

p Yd , Yt ? min min p Yj , Yt

q i i j

?

?

?

?

则 Yt 属于第q个人

识别阶段

?

篇三 : PCA算法

pca PCA算法

pca PCA算法

pca PCA算法

pca PCA算法

pca PCA算法

pca PCA算法

pca PCA算法

pca PCA算法

pca PCA算法

pca PCA算法

pca PCA算法

pca PCA算法

pca PCA算法

pca PCA算法

pca PCA算法

pca PCA算法

pca PCA算法

pca PCA算法

pca PCA算法

pca PCA算法

pca PCA算法

pca PCA算法

pca PCA算法

pca PCA算法

pca PCA算法

pca PCA算法

pca PCA算法

pca PCA算法

pca PCA算法

pca PCA算法

pca PCA算法

pca PCA算法

pca PCA算法

pca PCA算法

pca PCA算法

pca PCA算法

pca PCA算法

pca PCA算法

pca PCA算法

pca PCA算法

pca PCA算法

pca PCA算法

pca PCA算法

pca PCA算法

pca PCA算法

pca PCA算法

pca PCA算法

pca PCA算法

pca PCA算法

pca PCA算法

pca PCA算法

pca PCA算法

pca PCA算法

pca PCA算法

pca PCA算法

扩展:pca / pca算法原理 / pca算法 matlab

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多