首页 > 编程知识 正文

matlab中主成分分析函数pca,主成分分析法matlab例题

时间:2023-05-03 16:59:09 阅读:201598 作者:3094

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

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

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

1.主成分分析的思想

1.1 降维处理

1.1.1降维处理的作用

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

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

1.1.2降维处理的例子

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

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

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

可以看到主元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更好。

为什么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 主成分分析法的滥用——主成分得分引用zzdxy发表于《决策与统计》:

3.2主成分分析用于聚类

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

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

3.3主成分回归

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

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。