主成分分析(PCA)

基本概念

主成分分析(Principal Component Analysis, PCA)是研究如何将多指标问题转化为较少的综合指标的一种重要的统计方法,它能将高维空间的问题转化到低维空间去处理,使问题变得比较简单、直观,而且这些较少的综合指标之间互不相关,又能提供原有指标的绝大部分信息。

PCA是一个无监督问题,不是基于标签,而是基于方差。我们可以认为原始的数据在某一个维度上是非常密集的,PCA就是需要把这些密集的点给扩散大,相当于基于方差出找方差最大的方向,越大的方差方向数据点更会分分开,便于分类。

主成分分析除了降低多变量数据系统的维度以外,同时还简化了变量系统的统计数字特征。主成分分析在对多变量数据系统进行最佳简化的同时,还可以提供许多重要的系统信息,例如数据点的重心位置(或称为平均水平),数据变异的最大方向,群点的散布范围等。

主成分分析作为最重要的多元统计方法之一,其核心是K-L变换,在高维信号压缩和特征提取等领域已获得广泛应用。主成分分析的基本思路可概述如下:借助一个正交变换矩阵,将分量相关的原随机变量转换成分量不相关的新变量。从代数角度,即将原变量的协方差矩阵转换成对角矩阵。从几何角度,将原变量系统变换成新的正交系统,使之指向样本点散布最开的正交方向,进而对多维变量系统进行降维处理。按照特征提取的观点,主成分分析相当于一种基于最小均方误差的提取方法。

 算法实现

 用的是MATLAB自带的一个简单的数据集fisheriris,该数据集数据类别分为3类,setosa,versicolor,virginica。每类植物有50个样本,共150个样本代表150朵花瓣。每个样本有4个属性,分别为花萼长,花萼宽,花瓣长,花瓣宽。其中meas是150*4的矩阵代表着有150个样本每个样本有4个属性描述,species代表着这150个样本的分类。

三种颜色的三点分别对应于三种类型的花瓣,横坐标和纵坐标分别为护板长度和花瓣宽度,实际我们可以看出对于这两组数据来说,区分出来比较容易,群体与群体之间的差别比较明显。这里我们想办法将二维的特征降低到一维特征,使用matalb自带的主成分分析函数pca进行主成分分析,使用的命令如下:

 [coeff, score, latent, tsquared, explained, mu] = pca(meas(:,3:4));

 我们可以看到图中有红色和绿色两条短线,分别是PCA的两组成分分量,结合图中我们可以看出数据在红色主成分分量分布的方差是比较大的,根据这组成分就能很好的将数据进行分类。所以对于花瓣长度和花瓣传毒这样一个二维数据而言,对其降维的话可以通过第一组成分分量代表数据集的分布。

使用pca函数得到的参数中第一个参数coeff保存的是主成分分析的主成分在原坐标系中坐标向量的内容,每一列对应一个主成分的分量,每一行对应于原坐标系坐标的分量。计算的coeff结果如下:

0.921777692631943      -0.387718822558475

0.387718822558475      0.921777692631943

第一列中0.921777692631943对应的是红色短线的方向向量,0.387718822558475对应的是绿色短线的方向向量,该数据不包含中心未知的偏移量,这个信息包含在mu数据中。

Latent是原始数据协方差矩阵的特征值,从中可以看出各个主成分分量的占比,本数据集这个参数的结果如下:

3.66123804559049

0.0360460707406019

可以看出第一主成分对方差的贡献是最大的。Explained是某个主成分对应方差占整体的百分比,其结果如下:

99.0250662484556

0.974933751544399

也就是说第一主成分占整体方差的99.025%,第二主成分只占0.975%。

然后使用花萼长,花萼宽,花瓣长,花瓣宽进行主成分分析,画出鸢尾花数据集的PCA散点图矩阵,其结果如图所示。

从第一主成分来看可以很好的将数据分开,其数据直方图混叠的程度比较低,但是成分2、成分3、成分4的散点图以及矩阵困跌比较严重,很难将数据给分开。接下来看一下各个主成分对方差的贡献率,可以看出第一主成分的贡献率高达92.46%,第二主成分的贡献率为5.3%,后面更少,可以判断通过第主成分可以很好的将数据进行分类。  

 源代码

%% 初始化工作空间
clc
clear
close all

%% 载入数据
load fisheriris

%% 二维数据示例
% 花瓣长度和花瓣宽度散点图
figure;
speciesNum = grp2idx(species);
gscatter(meas(:,3),meas(:,4),speciesNum,['r','g','b'])
% 花瓣长度和宽度的PCA分析

[coeff, score, latent, tsquared, explained, mu] = pca(meas(:,3:4));
hold on
plot(mu(1)+[0 coeff(1,1)],mu(2)+[0 coeff(2,1)],'r')
plot(mu(1)+[0 coeff(1,2)],mu(2)+[0 coeff(2,2)],'g')
hold off
axis equal
axis([-1 7 -1 7])
xlabel('花瓣长度')
ylabel('花瓣宽度')

%% 四维数据示例
%% 主成分分析 Principal Component Analysis
% measRe = score*coeff'+repmat(mu,size(score,1),1);
[coeff, score, latent, tsquared, explained, mu] = pca(meas);
% PLotMatrix绘制散点图矩阵
% 初始化绘图窗口
hf  = figure;
hf.Units = 'Pixels';

hf.Position = [50 50 800 800];
% 绘制散点图矩阵
speciesNum = grp2idx(species);
[H,AX,BigAx] = gplotmatrix(score,[],speciesNum,['r','g','b']);
legend(AX(13+3),{'Setosa 山鸢尾','Versicolor 多色鸢尾','Virginica 弗吉尼亚鸢尾'},'Location','northwest','FontWeight','Bold','Fontsize',10)
title(BigAx,'鸢尾花数据PCA散点图矩阵','FontWeight','Bold','Fontsize',16)
%横坐标标题
xlabel(AX(4),{'Component 1';'成分1'},'FontWeight','Bold','Fontsize',12)
xlabel(AX(8+1),{'Component 2';'成分2'},'FontWeight','Bold','Fontsize',12)
xlabel(AX(12+2),{'Component 3','成分3'},'FontWeight','Bold','Fontsize',12)
xlabel(AX(16+3),{'Component 4','成分4'},'FontWeight','Bold','Fontsize',12)
% 纵坐标标题
ylabel(AX(1),{'Component 1';'成分1'},'FontWeight','Bold','Fontsize',12)
ylabel(AX(2),{'Component 2';'成分2'},'FontWeight','Bold','Fontsize',12)
ylabel(AX(3),{'Component 3','成分3'},'FontWeight','Bold','Fontsize',12)
ylabel(AX(4),{'Component 4','成分4'},'FontWeight','Bold','Fontsize',12)
% Biplot绘制向量图
hf2 = figure;
vbls={'萼片长度','萼片宽度','花瓣长度','花瓣宽度'};
biplot(coeff(:,1:3),'Score',score(:,1:3),'Varlabels',vbls);

 

转载于:https://www.cnblogs.com/loveqian/p/10833813.html

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值