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

📄 rekdaqrnn.m

📁 用于目标识别的核辨别分析程序
💻 M
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear;
% filename1='F:\Document\PH.D.Program\雷达数据\radardata\an4';
% filename2='F:\Document\PH.D.Program\雷达数据\radardata\jiang4';
% filename3='F:\Document\PH.D.Program\雷达数据\radardata\yak2';

filename1='F:\Document\PH.D.Program\雷达数据\radardata\an4';
filename2='F:\Document\PH.D.Program\雷达数据\radardata\jiang7';
filename3='F:\Document\PH.D.Program\雷达数据\radardata\yak1';

% d  the variable parameter of RBF kernel
% g  the index number of polynomial kernel
d=0.5;
g=2;

bangle=1;
angle=60

QQ=12   % k-NFL or k-NFP的最邻元素个数

eachnum=angle-bangle+1;
classnum=3;
trnum=eachnum/2;
tenum=eachnum/2;

load(filename1);
aa=getrp(x);
Tr1=aa(:,bangle:2:angle);
Te1=aa(:,(bangle+1):2:angle);


load(filename2);
aa=getrp(x);
Tr2=aa(:,bangle:2:angle);
Te2=aa(:,(bangle+1):2:angle);

load(filename3);
aa=getrp(x);
Tr3=aa(:,bangle:2:angle);
Te3=aa(:,(bangle+1):2:angle);

% normalization
for i=1:trnum
    Tr1(:,i)=Tr1(:,i)/norm(Tr1(:,i));  
    Tr2(:,i)=Tr2(:,i)/norm(Tr2(:,i));  
    Tr3(:,i)=Tr3(:,i)/norm(Tr3(:,i));  
end
for i=1:tenum  
    Te1(:,i)=Te1(:,i)/norm(Te1(:,i));  
    Te2(:,i)=Te2(:,i)/norm(Te2(:,i));  
    Te3(:,i)=Te3(:,i)/norm(Te3(:,i));
end

L=[Tr1 Tr2 Tr3]';
T=[Te1 Te2 Te3]';
train_num=trnum*classnum;
test_num =tenum*classnum;

for i=1:classnum
    S1(i*trnum-trnum+1:i*trnum,1)=i;
    S2(i*tenum-tenum+1:i*tenum,1)=i;
end

% feature extraction part 
% Build the KDA+QR solution (give a data structure)
% function [dataKDAQR, centroids, K]=buildKDAQR(L,S)
tic
[dataKDAQR,centeredkM,K]=buildKDAQR(L,S1);
t=toc;
% return


% %  L为行矢量
% classnum=max(S);
% n = size(L,1); % 训练样本个数
% k = classnum;             % 类别数
% d = size(L,2); % 训练样本维数
% av = mean(L)'; % 总平均列矢量
% % d  the variable parameter of RBF kernel
% % g  the index number of polynomial kernel
% d=0.5;
% g=2;
% 
% TL = L'; % 翻转,训练样本矩阵变为列矩阵
% 
% % 按类别顺序组成一个包含各自样本数的矩阵
% numarray = [];
% for i = 1:k
%     numarray = [numarray,length(find(S==i))];
% end
% 
% % 构建均值矩阵
% centroids = [];
% for s = 1:k
%     loc = find(S==s);
%     
%     x = mean(TL(:,loc)')';
%     
%     centroids = [centroids, x];
% end
% 
% % kernel matrix (uncentered)
% K=zeros(n);
% for i=1:n
%    for j=1:n
%        K(i,j)=KernelFunction(L(i,:),L(j,:),d,g);
%    end
% end
% 
% 
% M = zeros(n,k);
% N = zeros(n,k);
% E = zeros(n,n);
% 
% pos = 0;
% for i = 1:k
%     M(pos+1:pos+numarray(i),i)= 1/numarray(i);
%     pos = pos + numarray(i);
% end
% 
% pos = 0;
% for i = 1:k
%      N(pos+1:pos+numarray(i),i)= 1/sqrt(numarray(i));
%      N(:,i) = N(:,i) - sqrt(numarray(i))/n;
%      pos = pos + numarray(i);   
% end
% 
% KM = K*M;
% Y = N'*KM;
% Z = KM - ones(n,1)*(ones(1,n)*KM)/n;
% 
% R = chol (M'*K*M);
% invR = inv(R);
% B = invR'*Y'*Y*invR;
% W = invR'*Z'*Z*invR;
% 
% reg=1e-3;
% [V,D] = eig(inv(W+ reg*eye(k))*B);
% 
% dataKDAQR=V'*inv(R')*M';



features=K*dataKDAQR';
toc


K_test=zeros(test_num,train_num);
for i=1:test_num
    for j=1:train_num
        K_test(i,j)=KernelFunction(T(i,:),L(j,:),d,g);
    end
end
test_features=K_test*dataKDAQR';

% 第二种方法,将比较测试矢量将与各类训练特征的均值之间测距,选最小值做为一个分类
% tm1=mean(features(1:trnum,:),1);
% tm2=mean(features(trnum+1:2*trnum,:),1);
% tm3=mean(features(2*trnum+1:3*trnum,:),1);
% trnum=1;
% 
% features=[tm1;tm2;tm3];


% recognize it with nn classifier
% Nearest Neighbour Classifier-NNC
% function [NNCrate]=NNclassifier(features,test_features,trnum,tenum,classnum)
KDAQRNNrate=NNclassifier(features,test_features,trnum,tenum,classnum)

% Nearest Neighbour Classifier-NNC_1
% function [NNCrate]=NNclassifier_1(features,test_features,S1,S2,classnum)
KDAQRNN_1rate=NNclassifier_1(features,test_features,S1,S2,classnum)
return
% Nearest Feature Line Classifier-NFL
% function [NFLCrate]=NFLclassifier(features,test_features,trnum,tenum,classnum)
% NFLCrate=NFLclassifier(features',test_features',trnum,tenum,classnum)
% return


% Modified Nearest Feature Line Classifier-MNFL
% function [MNFLCrate]=MNFLclassifier(features,test_features,trnum,tenum,classnum,K)
% MNFLCrate=MNFLclassifier(features',test_features',trnum,tenum,classnum,QQ)
% return

% Nearest Feature Plane Classifier-NFP
% function [NFPCrate]=NFPclassifier(features,test_features,trnum,tenum,classnum)
% NFPCrate=NFPclassifier(features',test_features',trnum,tenum,classnum)
% return


% Modified Nearest Feature Plane Classifier-MNFP
% function [MNFPCrate]=MNFPclassifier(features,test_features,trnum,tenum,classnum,K)
MNFPCrate=MNFPclassifier(features',test_features',trnum,tenum,classnum,QQ)

⌨️ 快捷键说明

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