【SVM分类】基于支持向量机实现数据分类附matlab代码

1 简介

支持向量机是利用已知数据类别的样本为训练样本,寻找同类数据的空间聚集特征,从而对测试样本进行分类验证,通过验证可将分类错误的数据进行更正。本文以体检数据为数据背景,首先通过利用因子分析将高维数据进行降维,由此将所有指标整合成几个综合性指标;为降低指标之间的衡量标准所引起的误差,本文利用 MATLAB软件将数据进行归一化处理,结合聚类分析将数据分类;最后本文利用最小二乘支持向量机分类算法进行分类验证,从而计算出数据分类的准确率,并验证了数据分类的准确性和合理性。

【SVM分类】基于支持向量机实现数据分类附matlab代码

【SVM分类】基于支持向量机实现数据分类附matlab代码

2 部分代码

%% 清空环境变量

clc

clear;

close all;

%% 加载能量特征样本

data_123=xlsread('data.xlsx');

%% 构造训练样本和测试样本

sample_1=data_123(1:15,1:5); % 

rowrank_1=randperm(size(sample_1,1)); %这里对数据的行进行随机排列;% 随机打乱矩阵的行数

data_1 = sample_1(rowrank_1, :);  %data_1表示随机排列后的数据样本

sample_2=data_123(16:25,1:5); % 

rowrank_2=randperm(size(sample_2,1)); %这里对数据的行进行随机排列;% 随机打乱矩阵的行数

data_2 = sample_2(rowrank_2, :);  %data_2表示随机排列后的数据样本

sample_3=data_123(26:38,1:5); % 

rowrank_3=randperm(size(sample_3,1)); %这里对数据的行进行随机排列;% 随机打乱矩阵的行数

data_3 = sample_3(rowrank_3, :);  %data_3表示随机排列后的数据样本

sample_4=data_123(39:47,1:5); % 正常

rowrank_4=randperm(size(sample_4,1)); %这里对数据的行进行随机排列;% 随机打乱矩阵的行数

data_4 = sample_4(rowrank_4, :);  %data_4表示随机排列后的数据样本

%定义一个变量m,表示选取每种故障训练样本的个数

m=6; %每种类型选取前 m 组作为训练样本。 

train_values_1 =data_1(1:m,1:4);

% [train_values_1,settings1] = mapminmax(train_values_1);

train_labels_1=data_1(1:m,5);

train_values_2 =data_2(1:m,1:4);

% [train_values_2,settings2] = mapminmax(train_values_2);

train_labels_2=data_2(1:m,5);

train_values_3 =data_3(1:m,1:4);

% [train_values_3,settings3] = mapminmax(train_values_3);

train_labels_3=data_3(1:m,5);

train_values_4 =data_4(1:m,1:4);

train_labels_4=data_4(1:m,5);

train_values=[train_values_1;train_values_2;train_values_3;train_values_4];

train_labels=[train_labels_1;train_labels_2;train_labels_3;train_labels_4];

%%测试样本

test_values_1 =data_1(m+1:end,1:4);

test_labels_1=data_1(m+1:end,5);

test_values_2 =data_2(m+1:end,1:4);

test_labels_2=data_2(m+1:end,5);

test_values_3 =data_3(m+1:end,1:4);

test_labels_3=data_3(m+1:end,5);

test_values_4 =data_4(m+1:end,1:4);

test_labels_4=data_4(m+1:end,5);

test_values=[test_values_1;test_values_2;test_values_3;test_values_4];

test_labels=[test_labels_1;test_labels_2;test_labels_3;test_labels_4];

tic; %计时开始

%% SVM网络训练

%%参数寻优

[bestacc,bestc,bestg] = SVMcgForClass(train_labels,train_values);  %%这里是寻找最优的惩罚系数和核参数

disp(['bestmse=',num2str(bestacc)]);

disp(['bestc=',num2str(bestc)]);  %惩罚系数

disp(['bestg=',num2str(bestg)]);  %核参数

cmd = ['-c ',num2str(bestc),' -g ',num2str(bestg)];   

%% 训练并对训练集分类

model = svmtrain(train_labels,train_values,cmd);

%% SVM测试样本分类

[predict_label,accuracy] = svmpredict(test_labels,test_values,model);

% 打印测试集分类准确率

total = length(test_labels); %% the number of label 

right = sum(predict_label == test_labels); %% find the accurate number of labels;如果预测的标签和给定的标签是一致的,那么right计数加和;

disp('打印测试集分类准确率');

str = sprintf( 'Accuracy = %g%% (%d/%d)',accuracy(1),right,total);

disp(str);

disp(['bestc=',num2str(bestc)]);  %惩罚系数

disp(['bestg=',num2str(bestg)]);  %核参数

%% 结果分析

% 测试集的实际分类和预测分类图

figure;

hold on;

plot(test_labels,'o');

plot(predict_label,'r*');

xlabel('测试集样本','FontSize',12);

ylabel('类别标签','FontSize',12);

legend('实际测试集分类','预测测试集分类');

title('基于SVM模型的测试集的实际分类和预测分类图','FontSize',12);

grid on;

toc; %计时结束

​3 仿真结果

【SVM分类】基于支持向量机实现数据分类附matlab代码

【SVM分类】基于支持向量机实现数据分类附matlab代码

4 参考文献

[1]王琳, 解婷婷. 基于支持向量机算法的数据分类验证研究[J]. 四川文理学院学报, 2016, 026(005):21-24.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。

【SVM分类】基于支持向量机实现数据分类附matlab代码

上一篇:基于蝗虫算法优化最小二乘支持向量机lssvm实现预测matlab代码


下一篇:PS水印教程:如何用PS制作圆形的图章水印