PCA原理

PCA(Principal Component Analysis),即主成分分析方法,是一种使用最广泛的数据降维算法。PCA的主要思想是将n维特征映射到k维上,这k维是全新的正交特征也被称为主成分,是在原有n维特征的基础上重新构造出来的k维特征。PCA的工作就是从原始的空间中顺序地找一组相互正交的坐标轴,新的坐标轴的选择与数据本身是密切相关的。其中,第一个新坐标轴选择是原始数据中方差最大的方向,第二个新坐标轴选取是与第一个坐标轴正交的平面中使得方差最大的,第三个轴是与第1,2个轴正交的平面中方差最大的。依次类推,可以得到n个这样的坐标轴。通过这种方式获得的新的坐标轴,我们发现,大部分方差都包含在前面k个坐标轴中,后面的坐标轴所含的方差几乎为0。于是,我们可以忽略余下的坐标轴,只保留前面k个含有绝大部分方差的坐标轴。事实上,这相当于只保留包含绝大部分方差的维度特征,而忽略包含方差几乎为0的特征维度,实现对数据特征的降维处理。

实现步骤

主成分分析的实现步骤如下:

1.输入样本矩阵
假设样本x1,x2,…,xN,共N个样本,每个样本以列向量的形式表示,每个样本有M维。
X=[x1 x2 … xN]MxN。
2.计算样本中每一维的均值,然后计算观察值与均值之间的偏差,再计算协方差矩阵
根据协方差函数

首先要求出每一维的均值,然后再计算观察值与均值之间的偏差,再计算协方差矩阵
3.计算协方差矩阵其中的特征值和特征向量矩阵
根据协方差矩阵就可以求出特征值和特征向量,然后给特征值进行降序排序,相应的
特征向量也要按照特征值的排序做出相应的调整,这样主要是为下一步的提取少量的特征
值做准备。
4.计算总能量,并选取贡献率最大的特征值
总能量的计算就是全部的特征值之和,而贡献率就是用前p个特征值去除以全部特征值
之和,如果前p个特征值之和占全部特征值之和的90%以上,就提取前p个特征值和前p个特
征值所对应的特征向量,这样就减少了维数。
5.计算前p个特征值所对应的的特征向量组成的矩阵,计算降维后的样本矩阵
根据上一步得到的新的特征向量,用原始的协方差矩阵去乘以此新的特征向量组成的新矩阵,
就可以得到降维后的样本矩阵。

pac的几种应用

语音性别识别数据集
MNIST数据集
用PCA做数据可视化
用PCA做图像压缩
将在今后的研究中做进一步探索

代码实现

以下为matlabe具体实现的代码

%%%%%%%%%%%%打开一个30行8列数据的txt文件%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
%第一步:输入样本矩阵%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
filename='src.txt';
fid=fopen(filename,'r');
vector=fscanf(fid,'%g',[30,8]);%输入一个矩阵,此矩阵有8个维度30个样本
%现对其进行pca降维
%%
%第二步:计算样本中每一维的均值,然后计算观察值与均值之间的偏差,再计算协方差矩阵
s=sum(vector,1);%计算每一列的均值
[nSmp,nFea] = size(vector);
vector=vector-repmat(mean(vector),nSmp,1);%把每一维的均值复制成nSmp*nFea矩阵,然后计算偏差
W=zeros(nFea,nFea);%建立一个nFea*nFea的零矩阵
W=W+vector'*vector;
W=W/(nSmp-1);%根据协方差公式计算协方差,得到协方差矩阵W
%%
%第三步:计算协方差矩阵的特征值和特征向量矩阵
fprintf(1,'Calculating generalized eigenvectors and eigenvalues...\n');
[eigvectors, eigvalues] = eig(W);%eigvectors为特征向量组成的矩阵,eigvalues特征值组成的对角矩阵
fprintf(1,'Sorting eigenvectors according to eigenvalues...\n');
d1=diag(eigvalues);%返回对角矩阵上的值
[d2 index]=sort(d1); %以升序排序,d2为排列后的值,index为索引值
cols=size(eigvectors,2);% 特征向量矩阵的列数
for i=1:cols
vsort(:,i) = eigvectors(:, index(cols-i+1) ); % vsort 是一个M*col(注:col一般等于M)阶矩阵,保存的是按降序排列的特征向量,每一列构成一个特征向量
dsort(i) = d1( index(cols-i+1) ); % dsort 保存的是按降序排列的特征值,是一维行向量
end %完成降序排列
%%
%第四步:计算总能量,并选取贡献率最大的特征值
dsum = sum(dsort);%对所有的特征值求和
dsum_extract = 0;%求前几个特征值之和,当前几个特征值之和大于90%时,可以认为这几个特征值可以表征当前矩阵
p = 0;
while( dsum_extract/dsum < 0.9)
p = p + 1;
dsum_extract = sum(dsort(1:p));
end
%当p=5时,贡献率为0.9095,所以就可以选取5个特征值代表当前矩阵
%%
%第五步:计算前p个特征值所对应的的特征向量组成的矩阵,计算降维后的样本矩阵
vsort = vsort(:,1:p);%提取前p个特征生成8*p矩阵
fprintf(1,'Feature extraction and calculating newData...\n');
newvector=vector*vsort;%生成nSmp行p列的矩阵,达到降维的效果

输入一个随机二维写入的txt文本
结果得到一个一维向量:

PAC原理及其算法实现相关推荐

  1. 免费送书啦!《3D计算机视觉:原理、算法及应用》一本全搞定

    1966年,人工智能学家Minsky在给学生布置的作业中,要求学生通过编写一个程序让计算机告诉我们它通过摄像头看到了什么,这也被认为是计算机视觉(Computer Vision,CV)最早的任务描述. ...

  2. 数据挖掘原理与算法:对森林火灾影响因素的分析

    数据挖掘原理与算法:对森林火灾影响因素的分析 一.介绍 Forest Fire Area Prediction of the burnt area by forest fires Overview T ...

  3. 数据挖掘原理与算法:机器学习->{[sklearn. model_selection. train_test_split]、[h2o]、[网格搜索]、[numpy]、[plotly.express]}

    数据挖掘原理与算法:机器学习->{[sklearn. model_selection. train_test_split].[h2o].[网格搜索].[numpy].[plotly.expres ...

  4. 数据挖掘原理与算法:练习题2

    数据挖掘原理与算法:练习题2 题目: 下表给出了一组有关天气状况和能否进行户外活动的数据.请给出所有包含属性"Play"的频繁项集(最小支持度计数为3) No. Outlook T ...

  5. 数据挖掘原理与算法:Jupyter

    数据挖掘原理与算法:Jupyter 一.认识Jupyter Jupyter介绍和使用 中文版 PIP(Python包管理工具) anaconda(开源的Python发行版本) Python,Anaco ...

  6. 数据挖掘原理与算法:练习题1

    数据挖掘原理与算法:练习题1 题目: 考虑下表中的数据集,其中A.B.C为属性,+.-为类标号,构建一个决策树 A B C Number of instances + - T T T 5 0 F T ...

  7. 强化学习ppt_机器学习原理、算法与应用配套PPT第四部分(深度学习概论、自动编码器、强化学习、聚类算法、半监督学习等)...

    本文是SIGAI公众号文章作者雷明编写的<机器学习>课程新版PPT第四部分,包含了课程内容的深度学习概论,自动编码器,受限玻尔兹曼机,聚类算法1,聚类算法2,聚类算法3,半监督学习,强化学 ...

  8. 红黑树(一)之 原理和算法详细介绍---转帖

    目录 1 红黑树的介绍 2 红黑树的应用 3 红黑树的时间复杂度和相关证明 4 红黑树的基本操作(一) 左旋和右旋 5 红黑树的基本操作(二) 添加 6 红黑树的基本操作(三) 删除 作者:Sky W ...

  9. java知识点8——垃圾回收原理和算法、通用的分代垃圾回收机制、 JVM调优和Full GC、开发中容易造成内存泄露的操作

    垃圾回收原理和算法 内存管理 Java的内存管理很大程度指的就是对象的管理,其中包括对象空间的分配和释放. 对象空间的分配:使用new关键字创建对象即可 对象空间的释放:将对象赋值null即可 垃圾回 ...

最新文章

  1. 企业网络推广——企业网络推广专员提高网站更新讲策略
  2. saltstack安装
  3. CTSCAPIO被教做人记
  4. CRM产品主数据介绍
  5. 03-instancing 工程分析详解
  6. 用python怎么下载_如何使用python下载视频
  7. git提交异常 fatal: LF would be replaced by..
  8. 只用一行代码,就导入Python所有库
  9. 【学术】论文读不懂怎么办?
  10. 记一次使用Openssl生成p12证书搭建https证书
  11. Appium原理及使用
  12. Vitis下Linux应用程序开发流程
  13. 滴答清单微信登录界面丢失
  14. 输出平行四边形图案(多种方案)
  15. Cannot enhance @Configuration bean definition ‘dataSourceConfig‘ since its singleton instanc .......
  16. 年末巨献|大数据盛会!企业大数据落地高峰论坛倒计时,速速报名!
  17. 三次握手与四次挥手过程详解
  18. 鼠标悬停 -css如何实现鼠标移至图片上显示遮罩层及文字
  19. 实现多线程的方法有哪几种?
  20. 人工神经网络图像识别,神经网络如何识别图像

热门文章

  1. 昆仑通态人机界面与单片机通信实战教程四:单片机程序的设计
  2. jstack定位CPU占用率高的线程代码
  3. Pandas输出文件使用Excel打开时中文出现乱码的解决方法
  4. hadoop 学习路线
  5. nacative mysql_分析996个词根在各大考纲词汇中的作用(二)
  6. 高校学生考勤管理系统设计与简单实现
  7. SyntaxError: invalid syntax(遇到问题)(已解决)
  8. XShell常用命令大全
  9. 可兼容所有浏览器的“收藏本站”、“设为首页”js代码
  10. 一个简单的Android破解WIFI密码的方法(实用)