⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pca5_fold.m

📁 模式识别中pca 5-fold交叉检验算法
💻 M
字号:
clear all;clc;
load fisheriris;
data=meas';
%M dimensions, N trials
[M,N] = size(data);
% subtract off the mean for each dimension
m2 = mean(data,2);
data = data-repmat(m2,1,N);
% calculate the covariance matrix
covariance = 1 / (N-1) * data * data';
% find the eigenvectors and eigenvalues
[PC, V] = eig(covariance);
% extract diagonal of matrix as vector
V = diag(V);
% sort the variances in decreasing order
[junk, rindices] = sort(-1*V);
V = V(rindices);
PC = PC(:,rindices);
PC3=PC(:,1:3);
PC2=PC(:,1:2);
PC1=PC(:,1);
% project the original data set
newdata3= PC3'* data;
newdata2= PC2'* data;
newdata1= PC1'* data;
% plot(newdata1(1,1:50),[1],'g*',...
%     newdata1(1,51:100),[1],'r.',...
%     newdata2(1,101:150),[1],'b+')
%  title('降到一维')
 
class=newdata1(51:150)';
class(1:50,2)=0;
class(51:100,2)=1;
classrnd=class(randperm(100),:);
%%%%%%%%%%%%%%%%%%%%%%%%% 1 %%%%%%%%%%%%%%%%%%%%%%
train1=classrnd(1:80,:);
test1=classrnd(81:100,:);
index=find((train1(:,2)-1));
class1=train1(index,1);
index=find(train1(:,2));
class2=train1(index,1);


[u1,o1]=normfit(class1);
[u2,o2]=normfit(class2);

index=find((test1(:,2)-1));
tclass1=test1(index,:);
index=find(test1(:,2));
tclass2=test1(index,:);

t1=tclass1';
t2=tclass2';
[tm1,tn1]=size(t1);
[tm2,tn2]=size(t2);

g1=log(o2./o1)+1/2*((t1-u2)./o2).^2-1/2*((t1-u1)./o1).^2;
g2=log(o2./o1)+1/2*((t2-u2)./o2).^2-1/2*((t2-u1)./o1).^2;
[gm1,gn1]=size(g1(find(g1<0)));
[gm2,gn2]=size(g2(find(g2>0)));
errorrate=(gn1+gn2)/(tn1+tn2)



%%%%%%%%%%%%%%%%%%%% 2 %%%%%%%%%%%%%%%
train1=[classrnd(1:60,:);classrnd(81:100,:)];
test1=classrnd(61:80,:);

index=find((train1(:,2)-1));
class1=train1(index,1);
index=find(train1(:,2));
class2=train1(index,1);


[u1,o1]=normfit(class1);
[u2,o2]=normfit(class2);

index=find((test1(:,2)-1));
tclass1=test1(index,:);
index=find(test1(:,2));
tclass2=test1(index,:);

t1=tclass1';
t2=tclass2';
[tm1,tn1]=size(t1);
[tm2,tn2]=size(t2);

g1=log(o2./o1)+1/2*((t1-u2)./o2).^2-1/2*((t1-u1)./o1).^2;
g2=log(o2./o1)+1/2*((t2-u2)./o2).^2-1/2*((t2-u1)./o1).^2;
[gm1,gn1]=size(g1(find(g1<0)));
[gm2,gn2]=size(g2(find(g2>0)));
errorrate=(gn1+gn2)/(tn1+tn2)


%%%%%%%%%%%%%%%%%%%%%%%%  3  %%%%%%%%%%%%%%%%%%%%%%%%%
train1=[classrnd(1:40,:);classrnd(61:100,:)];
test1=classrnd(41:60,:);

index=find((train1(:,2)-1));
class1=train1(index,1);
index=find(train1(:,2));
class2=train1(index,1);


[u1,o1]=normfit(class1);
[u2,o2]=normfit(class2);

index=find((test1(:,2)-1));
tclass1=test1(index,:);
index=find(test1(:,2));
tclass2=test1(index,:);

t1=tclass1';
t2=tclass2';
[tm1,tn1]=size(t1);
[tm2,tn2]=size(t2);

g1=log(o2./o1)+1/2*((t1-u2)./o2).^2-1/2*((t1-u1)./o1).^2;
g2=log(o2./o1)+1/2*((t2-u2)./o2).^2-1/2*((t2-u1)./o1).^2;
[gm1,gn1]=size(g1(find(g1<0)));
[gm2,gn2]=size(g2(find(g2>0)));
errorrate=(gn1+gn2)/(tn1+tn2)

%%%%%%%%%%%%%%%%% 4 %%%%%%%%%%%%%%%%%%%%%
train1=[classrnd(1:20,:);classrnd(41:100,:)];
test1=classrnd(21:40,:);
index=find((train1(:,2)-1));
class1=train1(index,1);
index=find(train1(:,2));
class2=train1(index,1);


[u1,o1]=normfit(class1);
[u2,o2]=normfit(class2);

index=find((test1(:,2)-1));
tclass1=test1(index,:);
index=find(test1(:,2));
tclass2=test1(index,:);

t1=tclass1';
t2=tclass2';
[tm1,tn1]=size(t1);
[tm2,tn2]=size(t2);

g1=log(o2./o1)+1/2*((t1-u2)./o2).^2-1/2*((t1-u1)./o1).^2;
g2=log(o2./o1)+1/2*((t2-u2)./o2).^2-1/2*((t2-u1)./o1).^2;
[gm1,gn1]=size(g1(find(g1<0)));
[gm2,gn2]=size(g2(find(g2>0)));
errorrate=(gn1+gn2)/(tn1+tn2)

%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5 %%%%%%%%%%%%%%%%%%%%% 
train1=classrnd(21:100,:);
test1=classrnd(1:20,:);

index=find((train1(:,2)-1));
class1=train1(index,1);
index=find(train1(:,2));
class2=train1(index,1);


[u1,o1]=normfit(class1);
[u2,o2]=normfit(class2);

index=find((test1(:,2)-1));
tclass1=test1(index,:);
index=find(test1(:,2));
tclass2=test1(index,:);

t1=tclass1';
t2=tclass2';
[tm1,tn1]=size(t1);
[tm2,tn2]=size(t2);

g1=log(o2./o1)+1/2*((t1-u2)./o2).^2-1/2*((t1-u1)./o1).^2;
g2=log(o2./o1)+1/2*((t2-u2)./o2).^2-1/2*((t2-u1)./o1).^2;
[gm1,gn1]=size(g1(find(g1<0)));
[gm2,gn2]=size(g2(find(g2>0)));
errorrate=(gn1+gn2)/(tn1+tn2)
% 
% 
% 
% 
% m1=mean(class1);
% m2=mean(class2);
% m3=mean(class3);
% Sb=(m2-m1)*(m2-m1)';
% Sw=sum(sum((class2-repmat(m2,50,1)).^2))+sum(sum((class1-repmat(m1,50,1)).^2));
% 
% 
% W1=inv(Sw)*(m2-m3)
% y2=W1*class2';
% y1=W1*class1';
% 
% x=ones(1,50);
% plot(y1,x,'b*',y2,x,'r.')
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -