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

📄 buildkdaqr.m

📁 用于目标识别的核辨别分析程序
💻 M
字号:
% Build the KDA+QR solution (give a data structure)
function [dataKDAQR, centroids, K]=buildKDAQR(L,S)

% build the KDA+QR data, 
% with L learning vectors, and S an vector of the class sizes.
% L  uses line vectors, S is a line vector-L为行矢量矩阵(每一行为原始数据矢量),S为行矢量
% L  train data transpose
% S  column vector(class label: 1,...,k)

% dataKDAQR   output the transformation matrix
% centroids   the centroid matrix(column vectors)
% K           the kernel matrix

% modified by hualin liu
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%  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';

⌨️ 快捷键说明

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