本帖最后由 dyhkxydfbb 于 2012-11-28 22:00 编辑
看了几篇关于KPCA的论文,也下载了一些代码,在自己的理解下修改了下以前的程序,大家看看这样写是不是正确啊,谢谢!
说明:程序要运行,需要安装libsvm,这个论坛里已经有啦
代码如下:
{/%% 清空环境变量
close all;
clear;
clc;
format compact;
%% 数据提取
% 载入测试数据wine,其中包含的数据为classnumber = 3,wine:178*13的矩阵,wine_labes:178*1的列向量
load chapter12_wine.mat;
winetrainstd=zscore(wine);%%标准化数据
X=winetrainstd;
% test=test_wine;
rbf_var=1000;
% [X,mean,std]=zscore(X); %数据预处理,并返回训练集的均值和标准差
n=size(X,1); %n是行数,m是列数
l=ones(n,n)/n;%用于核矩阵的标准化
for i=1:n
for j=1:n
K(i,j)=exp(-norm(X(i,:)-X(j,:))^2/rbf_var);
K(j,i)=K(i,j);
end
end
kl=K-l*K-K*l+l*K*l;
[coeff, score, latent, T2] = princomp(kl); %LATENT is the eigenvalues of the covariance matrix of X, COEFF is the loadings, SCORE is the principal component scores, TSQUARED is the Hotelling's T-squared statistic for each observation in X.
percent = 0.9; %input('确定方差贡献率限(0~1):') %the predetermined contribution rate, usually 85%
k=0;
for i=1:size(latent,1) %根据方差贡献率确定主元个数k(与第i个负荷向量相关联的方差等于对应的特征值); %% choose first k principal components
alpha(i)=sum(latent(1:i))/sum(latent);
if alpha(i)>=percent
k=i;
break;
end
end
disp('--KPCA主元个数k--')
k
disp('--KPCA主元方差贡献率--')
alpha(k)
%%%%提取主元
m=score(:,1:3);
% 选定训练集和测试集
% 将第一类的1-30,第二类的60-95,第三类的131-153做为训练集
train_wine = [m(1:30,:);m(60:95,:);m(131:153,:)];
% 相应的训练集的标签也要分离出来
train_wine_labels = [wine_labels(1:30);wine_labels(60:95);wine_labels(131:153)];
% 将第一类的31-59,第二类的96-130,第三类的154-178做为测试集
test_wine = [m(31:59,:);m(96:130,:);m(154:178,:)];
% 相应的测试集的标签也要分离出来
test_wine_labels = [wine_labels(31:59);wine_labels(96:130);wine_labels(154:178)];
%%%%%%%%%%%%%%%%%%%%%%%%%%% SVM网络训练
model = svmtrain(train_wine_labels, train_wine, '-c 2 -g 1');
%% SVM网络预测
[predict_label, accuracy] = svmpredict(test_wine_labels, test_wine, model);
%% 结果分析
% 测试集的实际分类和预测分类图
% 通过图可以看出只有一个测试样本是被错分的
figure;
hold on;
plot(test_wine_labels,'o');
plot(predict_label,'r*');
xlabel('测试集样本','FontSize',12);
ylabel('类别标签','FontSize',12);
legend('实际测试集分类','预测测试集分类');
title('测试集的实际分类和预测分类图','FontSize',12);
grid on;}
附上数据
2012-11-28 21:56 上传
点击文件名下载附件
5 KB, 下载次数: 28105