📄 kpcasvm.m
字号:
function [maxerror,meanerror,stderror] = KPCASVM(T,G,C,P)%UNTITLED1 Summary of this function goes here% Detailed explanation goes here% T= 77.7149 % G=18.6755% C=65.8118 % P=64.6552b=f2b(T,[0 10],8);% tic;% H1=xlsread('tading.xls',1,'A1:H123');H=xlsread('testy.xls',1,'A1:J60');H1=[];for L=1:8if b(L)==1 H1=[H1,H(:,L)];endendH1=[H1,H(:,9:10)]; %加上最好两列输出值len=size(H1,1);Vol=size(H1,2);H2=H1(:,Vol-1);delta=(max(H2)-min(H2)); %反归一delta1=min(H2); % [b,a]= butter(5,0.8);% H1=filtfilt(b,a,H);% % % % k=0;% P=zeros(len,9);% for j=1:9% delta= std(H1(:,j));% avg=mean(H1(:,j));% for i=1:len-k% if i>len-k% break% end% temp= H1(i,j)-avg;% if temp>=3*delta% P(i,j)=1;% H1=[H1(1:i-1,:);H1(i+1:len-k,:)];% % k=k+1;% end% end% end% [i,j]=find(P) data=H1; data=(data-ones(size(data,1),1)*min(data))./(ones(size(data,1),1)*(max(data)-min(data))); H1=data-ones(size(data,1),1)*mean(data); k=1; for L=1:len switch L case 1 A1=H1(2:len,1:Vol-2); B1=H1(2:len,Vol-1); C1=H1(1,1:Vol-2); D1=H1(1,Vol-1); case len A1=H1(1:len-1,1:Vol-2); B1=H1(1:len-1,Vol-1); C1=H1(len,1:Vol-2); D1=H1(len,Vol-1); otherwise A1=[H1(1:L-1,1:Vol-2);H1(L+1:len,1:Vol-2)]; B1=[H1(1:L-1,Vol-1);H1(L+1:len,Vol-1)]; C1=H1(L,1:Vol-2); D1=H1(L,Vol-1); end % A1=H1(1:40,1:8);% B1=H1(1:40,9);% C1=H1(41:60,1:8);% D1=H1(41:60,9); % max_ev =14; %选择主元个数 tading max_ev =21; %选择主元个数 rbf_var = 1.3; %髙斯函数的参数 cov_size=size(A1,1); %样本个数 for i=1:cov_size, %得到K for j=i:cov_size, K(i,j) = exp(-norm(A1(i,:)-A1(j,:))^2/rbf_var); K(j,i) = K(i,j); end end unit = ones(cov_size, cov_size)/cov_size; % centering in feature space! K_n = K - unit*K - K*unit + unit*K*unit; [evecs,evals] = eig(K_n); % A2=evecs; evals = real(diag(evals)); for i=1:cov_size, evecs(:,i) = evecs(:,i)/(sqrt(evals(i))); end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% test_num=size(A1,1); unit_test = ones(test_num,cov_size)/cov_size; K_test = zeros(test_num,cov_size); for i=1:test_num, for j=1:cov_size, K_test(i,j) = exp(-norm(A1(i,:)-A1(j,:))^2/rbf_var); end end K_test_n = K_test - unit_test*K - K_test*unit + unit_test*K*unit; test_features = zeros(test_num, max_ev); test_features = K_test_n * evecs(:,1:max_ev); A2=test_features;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% test_num=size(C1,1); unit_test = ones(test_num,cov_size)/cov_size; K_test = zeros(test_num,cov_size); for i=1:test_num, for j=1:cov_size, K_test(i,j) = exp(-norm(C1(i,:)-A1(j,:))^2/rbf_var); end end K_test_n = K_test - unit_test*K - K_test*unit + unit_test*K*unit; test_features = zeros(test_num, max_ev); test_features = K_test_n * evecs(:,1:max_ev); C2=test_features; % model = svmtrain(B1, A2, '-s 3 -t 2 -g 0.11 -c 50 -p 0.05');% model = svmtrain(B1, A2, '-s 3 -t 2 -g 0.9876 -c 21.1079 -p 1.1029 ');% G=0.11;% C=50;% P=0.05; str= ['-s 3 -t 2 -g ', num2str(G), ' -c ' num2str(C) ' -p ' num2str(P)]; model = svmtrain(B1, A2, str); [y, accuracy] = svmpredict(D1, C2, model); % y= y*delta+delta1; % if L==9% y=y-8;% end% x=abs(H2(L)-y)/H2(L);% x=abs((D1-y)/D1); if k==1 Y=y;% X=x; D=D1; k=0; else Y=[Y;y];% X=[X;x]; D=[D;D1]; end end% if size(Y,1)==0% G% C% P% end Y=Y+mean(data(:,Vol-1));% D=data(:,9); Y= Y*delta+delta1;% D= D*delta+delta1; X=abs(H2-Y)./H2;% X=abs(D-Y)./D;% toc;% t=toc;meanerror=mean(X);maxerror=max(X);stderror=std(X);% save('error.mat','meanerror','maxerror','stderror');% X=abs(D1-y);% error1=sqrt(sum(X.^2)/test_num)% error2=max(abs(D1-y)) % Y=ones(size(X,1),1)*mean(X); %error=sqrt(sum((X-Y).^2)/test_num)% % y= y*(max(H2)-min(H2))+min(H2); %反归一 % X=abs(D2-y);% error1=sqrt(sum(X.^2)/test_num)% error2=max(abs(D2-y))% % T1=[50:1:100]';% T2=[50:1:100]';% % V=[1,60,0,0.2];% plot(H2,Y,'bd','LineWidth',2 );% hold on% plot(T1,T2, 'k-','LineWidth',2 );% hold on% ylabel('实际值\bf%');% xlabel('测量值\bf%');% plot(T1+5,T2, 'k-','LineWidth',2 );% axis(V);% plot(H2,'r--','LineWidth',2 );% % axis(V);% hold on% plot(Y,'b','linewidth',2);% axis(V);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -