主成分分析matlab实例及测试,[学习笔记]主成分分析说明以及matlab实现

在研究问题过程中,随着问题中的变量增多,分析问题的难度与复杂度会不断加大。于是人们会想,如何用能保持变量原有特征的较少的新变量,代替原有的较多的旧变量,从而降低分析难度和复杂程度。

主成分分析就是把原来多个变量划为少数几个综合指标的一种统计分析方法。从数学的角度来看这是一种降维处理技术。

本文着重思想,无公式推导

1.主成分分析的思想

1.1 降维处理

1.1.1降维处理的作用

降维处理是将高维数据经过处理过后,保留一些重要的特征,去除噪声和不重要的特征,从而实现提升数据处理速度的目的。在实际生产和应用过程中,降维在一定(可容忍)的信息损失范围内,可以节省大量的时间和成本。

总结降维存在以下有点:数据集更易使用,降低算法的计算开销,去除噪声,是的结果更容易理解。

1.1.2降维处理的例子

c6b32c64bc9c87c9617ab7e429759a6b.png

这是一个二维数据表格,有两个变量(多维数据的处理方法相同)。这两组数据完全正相关,去中心划后可以得到如下表格。

737e33372fb8ad5111a8f4e246841b38.png

将数据放在坐标系上,再将坐标轴进行旋转得到下面的图形。那么这个值就是温度与体积的线性组合了,可以将新的坐标称为主元1和主元2,并且可以利用公式将原来的数值用现在的值表示出来。

b5262599151667f5a0a18d28f758f8e7.png

把所有a,b,c,d,e的值均使用主元表示,可以得到这样的结果:

0806766286e7169bd47cbb4a20bec491.png

可以看到主元2均为0,可以舍去,也就是两个变量可以只用主元1来表示,这就达到了降维的目的。

(引用自:https://zhuanlan.zhihu.com/p/44453206)

1.2 PCA

1.2.1 PCA的思想

如果由m个数据,而我们却希望将这m个数据从n维降到n‘维。降维必定会引起数据的损失,但是我们希望将损失降到最小。

如图表示一组二维数据,在图中给出了两个方向u1和u2.那么u1和u2哪个更好呢?从感性的角度而言u1比u2更好。

1aa9611898391ded19b4eeb6faa71241.png

为什么u1比u2更好呢?

于是由以下两种解释,解释一样本到这个直线的距离足够近。解释二样本在直线上的投影尽可能的分开。根据这两种解释产生了两种推导方式,分别是基于最小投影距离、基于最大投影方差。证明过程就不赘述了。

2. MATLAB实现

2.1 常见的调用函数

2.1.1求解相关系数函数corrcoeff

R = corrcoef(A):返回A的相关系数矩阵,其中A的列表示随机变量,行表示观测值。

x = randn(6,1);

y = randn(6,1);

A = [x y 2*y+3];

R = corrcoef(A)

R = corrcoef(A,B):返回两个随机变量A,B之间的系数。

2.1.2 计算矩阵的特征值和特征向量函数 eig

e = eig(A) 返回一个列向量,其中包含方阵 A 的特征值。

[V,D] = eig(A) 返回特征值的对角矩阵 D 和矩阵 V,其列是对应的右特征向量,使得 AV = VD。

2.1.3获取主对角线的元素值diag

D = diag(v) 返回包含主对角线上向量 v 的元素的对角矩阵。

x = diag(A) 返回 A 的主对角线元素的列向量。注意v是输入向量,输出v元素的对角矩阵,而A是输入矩阵,输出列向量x

2.1.4求累积和元素cumsun

B = cumsum(A) 从 A 中的第一个其大小不等于 1 的数组维度开始返回 A 的累积和。

如果 A 是向量,则 cumsum(A) 返回包含 A 元素累积和的向量。

如果 A 是矩阵,则 cumsum(A) 返回包含 A 每列的累积和的矩阵。

如果 A 为多维数组,则 cumsum(A) 沿第一个非单一维运算。

2.2matlab代码实现流程

%% 第一步:对数据x标准化为X

X=zscore(x);

%% 第二步:计算样本协方差矩阵

R = cov(X);

%% 注意:以上两步可合并为下面一步:直接计算样本相关系数矩阵

R = corrcoef(x);

%% 第三步:计算R的特征值和特征向量

[V,D] = eig®; % V 特征向量矩阵 D 特征值构成的对角矩阵

%% 第四步:计算主成分贡献率和累计贡献率

lambda = diag(D); % diag函数用于得到一个矩阵的主对角线元素值(返回的是列向量)

lambda = lambda(end1); % 因为lambda向量是从小大到排序的,我们将其调个头

% 计算贡献率

contribution_rate = lambda / sum(lambda);

% 计算累计贡献率 cumsum是求累加值的函数

cum_contribution_rate = cumsum(lambda)/ sum(lambda);

% 注意:这里的特征向量要和特征值一一对应,之前特征值相当于颠倒过来了,因此特征向量

的各列需要颠倒过来

% rot90函数可以使一个矩阵逆时针旋转90度,然后再转置,就可以实现将矩阵的列颠倒的效果

V=rot90(V)’;

(引用:清风数模讲解)

3. 主成分分析法的使用

3.1 主成分分析法的滥用——主成分得分引用王学民发表于《决策与统计》:

9b40eda4d9565648e41e4f5c05a424fc.png

3.2主成分分析用于聚类

可以将计算出的第一主成分和第二主成分的值作为两个新指标,对其进行聚类分析。(可以在图上直观的展示各样本的分布情况)

130a928691e8b385d8822b5d8e987f29.png

同样由于使用主成分会降低部分信息。因此只有在指标个数特别多,且指标之间存在很强的相关性时才能使用聚类分析。

3.3主成分回归

(参考:https://zhuanlan.zhihu.com/p/93051500)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值