clear;
clc;
X=load('E:\KuGou\sxpshuju\baijiujifen\trainjifen.dat');
T=load('E:\KuGou\sxpshuju\baijiujifen\testjifen.dat');
[Xrow, Xcol] = size(X); % Xrow:样本个数 Xcol:样本属性个数
[Xrow_t, Xcol_t] = size(T)
%% 数据预处理,进行标准化出理,处理后均值为0方差为1
X0=zscore(X); % 标准阵X0,标准化为均值0,方差1;
T0=zscore(T);
c=3.61 % 核参数取值
%% 求核矩阵
for i = 1 : Xrow
for j = 1 : Xrow
K(i,j) = exp(-(norm(X0(i,:) - X0(j,:)))^2/c);%求核矩阵,采用径向基核函数,参数c
end
end
%% 特征值分解
[V,D]=eig(K, 'nobalance' );%求特征值和特征向量
d1=max(D);%求每一列的最大特征值
for i = 1 : Xrow
entropy(i) = d1(:,i)*(V(:,i)'*n0)^2;%求熵
end
[t,r]=sort(entropy,'descend');%将特征值按降序排列,t是排列后的数组,r是序号
k1=V(:,r);%对应于特征值的特征向量
for i=1:max(r);
G(i)=t(i)/sum(t);
end
G;%求某个特征值的贡献率
Z=K*k1; %训练样本核熵变换后输出结果
%% 测试样本处理
for i=1:Xrow_t, %test_num是测试样本的个数
for j=1:Xrow,%cov_size是训练样本的个数
K_t(i,j)= exp(-(norm(T0(i,:) - X0(j,:)))^2/c);
end
end
Zt = [K_t*k1];%测试样本核熵变换后输出结果
save ktr1.dat Z -ascii;
save kt201.dat Zt -ascii;
x1=Z(1:80,1);
x2=Z(1:80,2);
x3=Z(1:80,3);
y1=Z(81:160,1);
y2=Z(81:160,2);
y3=Z(81:160,3);
z1=Z(161:240,1);
z2=Z(161:240,2);
z3=Z(161:240,3);
o1=Z(241:320,1);
o2=Z(241:320,2);
o3=Z(241:320,3);
p1=Z(321:400,1);
p2=Z(321:400,2);
p3=Z(321:400,3);
q1=Z(401:480,1);
q2=Z(401:480,2);
q3=Z(401:480,3);
plot3(x1,x2,x3,'b<',y1,y2,y3,'g+',z1,z2,z3,'r*',o1,o2,o3,'m>',p1,p2,p3,'co',q1,q2,q3,'k^');
xlabel('FD1');
ylabel('FD2');
zlabel('FD3');
z=Zt;
y1=z(1:20,1);
y2=z(1:20,2);
y3=z(21:40,1);
y4=z(21:40,2);
y5=z(41:60,1);
y6=z(41:60,2);
y7=z(61:80,1);
y8=z(61:80,2);
y9=z(81:100,1);
y10=z(81:100,2);
y11=z(101:120,1);
y12=z(101:120,2);
figure;
plot(y1,y2,'b<',y3,y4,'g+',y5,y6,'r*',y7,y8,'m>',y9,y10,'co',y11,y12,'k^');
xlabel('FD1');
ylabel('FD2');
评论2