主成分分析(PCA)
2016-07-10 14:35
239 查看
是一种数据降维方法。保留具有代表性的主成分,舍弃比重较小的成分。
计算协方差矩阵;
对协方差矩阵进行特征值分解,求解特征值和特征向量;
数据降维。根据所要降低的维数k,提取前k个特征值所对应的主特征向量;计算各样本在主特征方向上的投影;
还原近似数据。求原始数据的k维近似重构矩阵。
算法步骤
预处理数据。均值标准化(零均值),特征缩放;计算协方差矩阵;
对协方差矩阵进行特征值分解,求解特征值和特征向量;
数据降维。根据所要降低的维数k,提取前k个特征值所对应的主特征向量;计算各样本在主特征方向上的投影;
还原近似数据。求原始数据的k维近似重构矩阵。
matlab代码实现
clear all; close all; clc; load data.mat [m,n] = size(X); %%step1:预处理数据。均值标准化(零均值),特征缩放; x = X - repmat(mean(X),50,1); s = std(x,0,1); x = x./repmat(s,50,1); axis([-3 3 -3 3]); hold on plot(x(:, 1), x(:, 2), 'bo'); %%step2:计算协方差矩阵; sigma = (x'*x)/m; %%step3:对协方差矩阵进行特征值分解,求解特征值和特征向量; [U,S,V] = svd(sigma);%采用奇异值分解,可以对任意阵进行求解,而且在S的对角线上,非负且按降序排列,便于提取主成分. %%step4:数据降维; k = 1; u = U(:,1:k);%提取主特征向量 dr = x*u; %投影 %%step5:还原近似数据. x_r = dr*u';%重构 plot(x_r(:, 1), x_r(:, 2), 'ro');
效果图
相关文章推荐
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- C#递归算法之分而治之策略
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- C#算法之大牛生小牛的问题高效解决方法
- C#算法函数:获取一个字符串中的最大长度的数字
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- 经典排序算法之冒泡排序(Bubble sort)代码
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法
- Ruby实现的合并排序算法
- C#折半插入排序算法实现方法