基于SVM的数据分类预测——意大利葡萄酒种类识别

 SVM分类的基本步骤如下: 根据训练集数据,选取最优的超平面(通常为线性或非线性),使得该平面划分出的两个类别中存在最大的间隔距离。 对新数据进行预测时,将其投射到该最优超平面上,并根据其所处的位置判定其属于哪个类别。

数据:​​​​​​Wine - UCI Machine Learning Repository

基于SVM的数据分类预测——意大利葡萄酒种类识别

%% 清空环境变量

close all;
clear;
clc;
format compact;


%% 数据提取

% 载入测试数据wine,其中包含的数据为classnumber = 3,wine:178*13的矩阵,wine_labes:178*1的列向量
load chapter_WineClass.mat;

% 随机选定训练集和测试集

k_1=rand(1,59);
[m_1,n_1]=sort(k_1);
k_2=rand(1,71);
[m_2,n_2]=sort(k_2);
k_3=rand(1,48);
[m_3,n_3]=sort(k_3);
% 将第一类的1-30,第二类的60-95,第三类的131-153做为训练集
train_wine = [wine(n_1(1:30),:);wine((59.+n_2(1:35)),:);wine((130.+n_3(1:24)),:)];
% 相应的训练集的标签也要分离出来
train_wine_labels = [wine_labels(n_1(1:30));wine_labels(59.+n_2(1:35));wine_labels(130.+n_3(1:24))];
% 将第一类的31-59,第二类的96-130,第三类的154-178做为测试集
test_wine =[wine(n_1(31:59),:);wine((59.+n_2(36:71)),:);wine((130.+n_3(25:48)),:)];
% 相应的测试集的标签也要分离出来
test_wine_labels = [wine_labels(n_1(31:59));wine_labels(59.+n_2(36:71));wine_labels(130.+n_3(25:48))];
clear k_1 k_2 k_3 m_1 m_2 m_3 n_1 n_2 n_3


%% 数据预处理

% 数据预处理,将训练集和测试集归一化到[0,1]区间
[mtrain,ntrain] = size(train_wine);
[mtest,ntest] = size(test_wine);

dataset = [train_wine;test_wine];
% mapminmax为MATLAB自带的归一化函数
[dataset_scale,ps] = mapminmax(dataset',0,1);
dataset_scale = dataset_scale';

train_wine = dataset_scale(1:mtrain,:);
test_wine = dataset_scale( (mtrain+1):(mtrain+mtest),: );


%% SVM网络训练

model = svmtrain(train_wine_labels, train_wine, '-c 2 -g 1');

%% SVM网络预测

[predict_label, accuracy,predict_values] = 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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值