📄 buildkdaqr.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 + -