分酒问题matlab代码,KPCA用于葡萄酒分类的测试代码

作者分享了使用Kernel Principal Component Analysis (KPCA)进行数据降维,并结合SVM对葡萄酒分类问题的实践过程。通过标准化、主成分分析、选择关键主元和训练SVM模型,最终实现了高精度的测试集分类。
摘要由CSDN通过智能技术生成

本帖最后由 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;}

附上数据

99e39a8196ca8f63dc1eee7b0d72d0ed.gif

2012-11-28 21:56 上传

点击文件名下载附件

5 KB, 下载次数: 28105

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值