楼主: kamchao
6111 3

[MATLAB] matlab核主成分分析程序 [推广有奖]

  • 0关注
  • 0粉丝

硕士生

66%

还不是VIP/贵宾

-

威望
0
论坛币
764 个
通用积分
2.1200
学术水平
6 点
热心指数
6 点
信用等级
6 点
经验
2818 点
帖子
80
精华
0
在线时间
262 小时
注册时间
2011-8-18
最后登录
2023-11-20

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
自编matlab核主成分分析程序

  1. function k=kernel(x,y,i,var);
  2. %定义核函数
  3. if i==1
  4.    k=exp((-norm(x-y)^2)/(2*var^2));  %i=1时,使用高斯核
  5. end
  6. if i==2
  7.    k=(sum(x.*y)+1)^var;  %i=1时,使用2阶多项式核
  8. end

  9. M文件1

  10. M文件2

  11. function [eigenvalue,kl,eigenvectors,project_invectors,le,leiji,tt]=kpca(x,getpercent,var,sign)
  12. %kpca进行数据提取的函数
  13. psize=size(x);
  14. m=psize(2);
  15. n=psize(1);
  16. l=ones(m,m);
  17. for i=1:m
  18.     for j=1:m
  19.        k(i,j)=kernel(x(i,:),x(j,:),sign,var); %计算核矩阵k
  20.     end
  21. end
  22. kl=k-l*k/m-k*l/m+l*k*l/(m*m);  %计算kl
  23. [v,e]=eig(kl); %求特征值和特征向量
  24. e=diag(e);
  25. v=v';    %此时每一行对应的是特征向量
  26. %将特征向量单位正交化得到B
  27. B(1,:)=v(1,:);
  28. for i=2:m  
  29.    for j=1:i-1
  30.         B(i,:)=v(i,:)-(sum(v(i,:).*B(j,:))/sum(B(j,:).*B(j,:)))*B(j,:);
  31.     end
  32. end

  33. for i=1:m
  34.     s=0;
  35.     for j=1:m
  36.        s=s+B(i,j)*B(i,j);
  37.     end
  38.     B(i,:)=B(i,:)/sqrt(s);
  39. end

  40. sign=[e B]; %将特征值和特征向量合并成一个矩阵 ,第一列为特征值,后面为对应的特征向量

  41. [signsort,ix]=sort(sign,1,'descend');  %按照特征值由大到小排列矩阵
  42. for i=1:m
  43.     for j=2:m+1
  44.         signsort(i,j)=sign(ix(i,1),j);  %将特征向量作适当调整与特征值对齐
  45.     end
  46. end
  47. %save '..\\kpcaproject.m' signsort -ascii
  48. pp=sum(signsort(:,1)); %特征值总的和
  49. for i=1:m
  50.     le(i)=signsort(i,1)/pp; %特征值贡献率大小
  51. end
  52. leiji(1)=le(1);
  53. for i=2:m     %计算累计贡献率
  54.     leiji(i)=leiji(i-1)+le(i);   
  55. end
  56. tt=1;
  57. for i=1:m
  58.     if leiji(i)>=getpercent %提取主分量
  59.         tt=i;        
  60.         break;
  61.     end
  62. end
  63. eigenvectors=signsort(1:tt,2:m+1)';  %求出提取出的主成分
  64. if tt==1   
  65.     project_invectors(1,:)=signsort(1,2:m+1)*kl;
  66.     project_invectors(2,:)=ones(1,psize(1));
  67. else   
  68.    project_invectors=kl*eigenvectors;   %计算在特征空间向量上的投影
  69. end  
  70. eigenvalue=signsort(:,1);
  71. %end of the function
复制代码


剩下代码下载: matlab核主成分分析程序





二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:MATLAB 主成分分析 atlab matla 分析程序 程序 matlab matlab 核主成分 分析程序

已有 1 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
niuniuyiwan + 60 + 60 + 5 + 5 + 5 精彩帖子

总评分: 经验 + 60  论坛币 + 60  学术水平 + 5  热心指数 + 5  信用等级 + 5   查看全部评分

沙发
zhiqlee 发表于 2015-5-10 17:42:27 |只看作者 |坛友微信交流群
  1. x =zscore(A);%如果直接用A,得到的特征值竟然全是1(由一个0)
  2. getpercent = 0.9;
  3. var = 1;
  4. sign = 1;
  5. [eigenvalue,kl,eigenvectors,project_invectors,le,leiji,tt]=kpca(x,getpercent,var,sign)
复制代码
您好!我用您编写的MATLAB程序调试了一下,发现测试的结果还不如PCA方法效果好,不知道是不是我的参数设置有问题。我刚开始学习模式识别方面的知识,还请您指点迷津,谢谢!
我用的数据已上传!

matlab.zip

1.28 KB

本附件包括:

  • matlab.mat

使用道具

藤椅
jdx2007 发表于 2018-12-4 11:24:39 |只看作者 |坛友微信交流群
谢谢 分享!学习了!

使用道具

板凳
15243644923 发表于 2021-4-12 15:19:26 |只看作者 |坛友微信交流群
感谢

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-27 07:10