PCA算法

关于PCA的算法,网上有许多,但是很枯燥无味,我看着西瓜书上的PCA算法的介绍,写的确实很好但是根本很难看下去,给了我一种有着很多的宝藏却不知道从哪里开始的感觉,我本身也是算法的学习者,话不多说,接下来我给大家介绍一下我在机器学习的过程中的心得体会。希望有不同的可以私信我。

PCA算法全称是Principle Compoent Analysis,中文是主元成分分析。PCA的思想是将高维的数据投影到低维的数据,重新选定中心点,然后根据数据点的距离以次来计算所占的比例,简单点说就是离中心点越远的数据点在整个数据中所占的比例最大,这个比例也称作主元贡献率。PCA本身是不降维的,降维的过程体现在选择主元贡献率的过程中,本身所有的主元贡献率是100%,一般的主元贡献率要选择在85%以上,才能代表整个的数据,但是如果你选择的贡献率低于100%,那么就有一些离中心比较近的数据点没有被选择到,选择后新数据集就代替新的数据集,那么这就体现了降维的过程思想,具体的PCA算法思想介绍B站上就有,大家如果没听懂也没关系,只要会算法就行了。

以下是PCA算法的步骤:
1、数据预处理,对X按列标准化。
2、求相关矩阵R。
3、求R的特征值和特征向量P。
4、根据特征值从大到小重新排列特征值和特征向量P。
5、计算主元贡献率。
6、计算累计主元贡献率,当其大于85%(也可以自己选择主元贡献率,一般是85%),记录主元个数k。
7、计算主元矩阵。T=X*P
8、计算主元矩阵。

相关matlab代码:
下面展示一些 内联代码片

// A code block
x=[1.2,3,-1.1,17;
    1.5,5,-3,22;
    1.3,4.0,-2,19;
     0.7,3,-2.3,11
     1,4,-1.2,20.8];


stdr=std(x);
[n,m]=size(x); 
sddata=zscore(x);
[p,princ,E]=pca(sddata);
p=p(:,1:3);
sc=princ(:,1:3);
% egenvalue;
% per=100*egenvalue/sum(egenvalue);
CM=cov(sddata);
[T,lamda]=eig(CM);
E=flipud(diag(lamda));
num_p=1;
while sum(E(1:num_p))/sum(E)<1
num_p=num_p+1;
end
a=T(:,m-num_p+1:m);
TT=sddata*a
subplot(2,2,1)

bar(per(1:num_p))
for i=1:num_p
    text(bar_x(i)-0.25,per(i)+3,num2str((per(i))))
    text(bar_x(i)+0.25,per(i)+3,char('%'))
end
subplot(2,2,2)
plot(x)
subplot(2,2,4)
plot(TT)

// An highlighted block
x=[1.2,3,-1.1,17;
    1.5,5,-3,22;
    1.3,4.0,-2,19;
     0.7,3,-2.3,11
     1
  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值