支持向量机原理

分类

如图,在分类中,我们需要找到一个超平面(图中包括间隔的平面)把圆圈和方框分开

原问题
间隔最小,同时保证真实输出和模型输出积大于1

对偶问题

原先的最小化问题变成了最大化问题,原先的不等式约束变成了等式约束。

引入间隔c之后

核函数
如果在低维空间找不到超平面,这时需要将数据转换到高维空间。
就需要用到核函数。

回归

原问题与对偶问题

多分类问题

LIBSVM工具箱介绍

libsvm需要C++编译器,输入命令查看


libsvm要求输入和输出行相同
如分类器可以设置为

model=svmtrain(train,label,'- s 0 -t 2 -c 1.2 -g 2.8');

预测

svmpredict(train_label,Train_matrix,model);

我这里未安装,请你们自行安装
LIBSVM分类
I. 清空环境变量
II. 导入数据
III. 数据归一化
IV. SVM创建/训练(RBF核函数)
V. SVM仿真测试
VI. 绘图

I. 清空环境变量

clear all
clc

II. 导入数据

load BreastTissue_data.mat
  1. 随机产生训练集和测试集
n = randperm(size(matrix,1));
  1. 训练集——80个样本
train_matrix = matrix(n(1:80),:);
train_label = label(n(1:80),:);
  1. 测试集——26个样本
test_matrix = matrix(n(81:end),:);
test_label = label(n(81:end),:);

III. 数据归一化

[Train_matrix,PS] = mapminmax(train_matrix');
Train_matrix = Train_matrix';
Test_matrix = mapminmax('apply',test_matrix',PS);
Test_matrix = Test_matrix';

IV. SVM创建/训练(RBF核函数)

  1. 寻找最佳c/g参数——交叉验证方法
[c,g] = meshgrid(-10:0.2:10,-10:0.2:10);
[m,n] = size(c);
cg = zeros(m,n);
eps = 10^(-4);
v = 5;
bestc = 1;
bestg = 0.1;
bestacc = 0;
for i = 1:mfor j = 1:ncmd = ['-v ',num2str(v),' -t 2',' -c ',num2str(2^c(i,j)),' -g ',num2str(2^g(i,j))];cg(i,j) = svmtrain(train_label,Train_matrix,cmd);if cg(i,j) > bestaccbestacc = cg(i,j);bestc = 2^c(i,j);bestg = 2^g(i,j);endif abs( cg(i,j)-bestacc )<=eps && bestc > 2^c(i,j)bestacc = cg(i,j);bestc = 2^c(i,j);bestg = 2^g(i,j);endend
end
cmd = [' -t 2',' -c ',num2str(bestc),' -g ',num2str(bestg)];
  1. 创建/训练SVM模型
model = svmtrain(train_label,Train_matrix,cmd);

V. SVM仿真测试

[predict_label_1,accuracy_1] = svmpredict(train_label,Train_matrix,model);
[predict_label_2,accuracy_2] = svmpredict(test_label,Test_matrix,model);
result_1 = [train_label predict_label_1];
result_2 = [test_label predict_label_2];

Accuracy = 96.25% (77/80) (classification)
Accuracy = 57.6923% (15/26) (classification)

VI. 绘图

figure
plot(1:length(test_label),test_label,'r-*')
hold on
plot(1:length(test_label),predict_label_2,'b:o')
grid on
legend('真实类别','预测类别')
xlabel('测试集样本编号')
ylabel('测试集样本类别')
string = {'测试集SVM预测结果对比(RBF核函数)';['accuracy = ' num2str(accuracy_2(1)) '%']};
title(string)

LIBSVM回归

%% I. 清空环境变量
clear all
clc%% II. 导入数据
load concrete_data.mat%%
% 1. 随机产生训练集和测试集
n = randperm(size(attributes,2));%%
% 2. 训练集——80个样本
p_train = attributes(:,n(1:80))';
t_train = strength(:,n(1:80))';%%
% 3. 测试集——23个样本
p_test = attributes(:,n(81:end))';
t_test = strength(:,n(81:end))';%% III. 数据归一化
%%
% 1. 训练集
[pn_train,inputps] = mapminmax(p_train');
pn_train = pn_train';
pn_test = mapminmax('apply',p_test',inputps);
pn_test = pn_test';%%
% 2. 测试集
[tn_train,outputps] = mapminmax(t_train');
tn_train = tn_train';
tn_test = mapminmax('apply',t_test',outputps);
tn_test = tn_test';%% IV. SVM模型创建/训练
%%
% 1. 寻找最佳c参数/g参数
[c,g] = meshgrid(-10:0.5:10,-10:0.5:10);
[m,n] = size(c);
cg = zeros(m,n);
eps = 10^(-4);
v = 5;
bestc = 0;
bestg = 0;
error = Inf;
for i = 1:mfor j = 1:ncmd = ['-v ',num2str(v),' -t 2',' -c ',num2str(2^c(i,j)),' -g ',num2str(2^g(i,j) ),' -s 3 -p 0.1'];cg(i,j) = svmtrain(tn_train,pn_train,cmd);if cg(i,j) < errorerror = cg(i,j);bestc = 2^c(i,j);bestg = 2^g(i,j);endif abs(cg(i,j) - error) <= eps && bestc > 2^c(i,j)error = cg(i,j);bestc = 2^c(i,j);bestg = 2^g(i,j);endend
end%%
% 2. 创建/训练SVM
cmd = [' -t 2',' -c ',num2str(bestc),' -g ',num2str(bestg),' -s 3 -p 0.01'];
model = svmtrain(tn_train,pn_train,cmd);%% V. SVM仿真预测
[Predict_1,error_1] = svmpredict(tn_train,pn_train,model);
[Predict_2,error_2] = svmpredict(tn_test,pn_test,model);%%
% 1. 反归一化
predict_1 = mapminmax('reverse',Predict_1,outputps);
predict_2 = mapminmax('reverse',Predict_2,outputps);%%
% 2. 结果对比
result_1 = [t_train predict_1];
result_2 = [t_test predict_2];%% VI. 绘图
figure(1)
plot(1:length(t_train),t_train,'r-*',1:length(t_train),predict_1,'b:o')
grid on
legend('真实值','预测值')
xlabel('样本编号')
ylabel('耐压强度')
string_1 = {'训练集预测结果对比';['mse = ' num2str(error_1(2)) ' R^2 = ' num2str(error_1(3))]};
title(string_1)
figure(2)
plot(1:length(t_test),t_test,'r-*',1:length(t_test),predict_2,'b:o')
grid on
legend('真实值','预测值')
xlabel('样本编号')
ylabel('耐压强度')
string_2 = {'测试集预测结果对比';['mse = ' num2str(error_2(2)) ' R^2 = ' num2str(error_2(3))]};
title(string_2)

代码可以不用网格搜索寻找最优参数,直接指定参数‘

代码和数据百度云

链接:https://pan.baidu.com/s/1w50keCHeEfx5djVaOZlsUg
提取码:1l82
复制这段内容后打开百度网盘手机App,操作更方便哦

作者:电气工程的计算机萌新-余登武

MATLAB机器学习系列-7支持向量机原理及其代码实现相关推荐

  1. 递归神经网络 matlab,机器学习系列:递归神经网络

    原标题:机器学习系列:递归神经网络 前言 BP 神经网络,训练的时候,给定一组输入和输出,不断的对权值进行训练,使得输出达到稳定.但 BP 神经网络并不是适合所有的场景,并不真正的体现出某些场景的真正 ...

  2. MATLAB机器学习系列-9:决策树和随机森林的原理及其例子代码实现

    决策树 原理 决策树通过把样本实例从根节点排列到某个叶子节点来对其进 行分类.树上的每个非叶子节点代表对一个属性取值的测试, 其分支就代表测试的每个结果:而树上的每个叶子节点均代表 一个分类的类别,树 ...

  3. MATLAB机器学习系列-8 极限学习机(Extreme Learning Machine, ELM)原理及其代码实现

    极限学习机(Extreme Learning Machine, ELM) 极限学习机网络结构和BP网络结构类似. 和BP神经网络不同点: 极限学习机输入层到隐含层的权重W是可以随意指定的.BP神经网络 ...

  4. MATLAB机器学习系列-6 竞争神经网络与SOFM(SOM)神经网络原理及其例子代码

    竞争神经网络 结构上和RBF等网络是比较像的.这里的距离是负数距离,||ndist||中带一个n,表示negative.在matlab中计算方法是ngedist. 它的计算过程是:待分类样本输入后,和 ...

  5. MATLAB机器学习系列-5 RBF、GRNN和PNN神经网络原理及其例子代码

    RBF(径向基神经网络) GRNN广义神经网络 PNN概率神经网络 RBF算例实现(回归) 数据集 % 1. 导入数据 load spectra_data.mat NIR输入,octane输出 %% ...

  6. MATLAB机器学习系列-11:粒子群优化原理及其matlab实现

    粒子群优化原理 粒子群算法思想来源于实际生活中鸟捕食的过程.假设在一个n维的空间中,有一群鸟(m只)在捕食,食物位于n维空间的某个点上,对于第i只鸟某一时刻来说,有两个向量描述,一个是鸟的位置向量,第 ...

  7. MATLAB机器学习系列-12:蚁群算法优化原理及其matlab实现

    蚁群算法原理 概述 蚁群算法(Ant Colony Algorithm, ACA)由Marco Dorigo于1992年在他的博士论文中首次提出,该算法模拟了自然界中蚂蚁的觅食行为. 蚂蚁在寻找食物源 ...

  8. 【机器学习】 逻辑回归原理及代码

    大家好,我是机器侠~ 1 Linear Regression(线性回归) 在了解逻辑回归之前,我们先简单介绍一下Linear Regression(线性回归). 线性回归是利用连续性的变量来预估实际数 ...

  9. MATLAB机器学习系列-4函数篇

    Matlab中的函数及其调用 1.匿名函数 匿名函数格式 函数名=@(参数)(函数体): 如 myfundhd=@(x)(x+2); 我们可以在命令行窗口直接输入匿名函数,然后调用 或者在m文件点击执 ...

最新文章

  1. java中synchronized介绍和用法
  2. java 集合反射_关于granite源码包CollectionUtil集合工具类获取集合反射类型、实例化各种集合类型HashSet/ArrayList等...
  3. Hibernate问题浅析
  4. 升级遗留代码的最佳实践
  5. javascript实现图片放大镜效果
  6. Promise【面试】
  7. LeetCode513 找左下角的值
  8. 闲人闲谈PS之十四——幕墙工程系统化管理施工设计篇
  9. 手机wps怎么设置打印横竖_WPS中横竖打印怎么设置
  10. 基于Layui实现的树形菜单页面
  11. 程序员路在何方的辛苦工作
  12. 2021 HZNU Winter Training Day 17 (2018 German Collegiate Programming Contest (GCPC 18))
  13. 基金的估值原来这么简单,一文看懂
  14. 【Pytorch深度学习实践】B站up刘二大人课程笔记——目录与索引(已完结)
  15. java jdk 8学习笔记,Java JDK 8学习笔记 PDF_源雷技术空间
  16. 三小时,破解数据库智能管控中的奥秘
  17. 浅谈数据中心新型末端母线配电系统
  18. 数字图像处理论文解读- 双边滤波效果 - Bilateral Filtering for Gray and Color Image
  19. 帆软10.0突然出现黑色框线以及打印预览出现plain问题
  20. 再见,2020。你好,2021!

热门文章

  1. python实验七答案_Python实验报告七
  2. Minimum Diameter Tree
  3. Android ConstraintLayout ConstraintSet动态布局
  4. Android 短视频拍摄、拍照滤镜 第三方库SDK
  5. Android NDK
  6. String.format() 格式化字符串
  7. SQL语句中timestamp进行排序BUG
  8. Rearrange an array of positive and negative integers
  9. 2021高考成绩微信查询方法6,2021年高考成绩查询时间、入口及方法
  10. 有关计算机发展的英语作文,写一篇英语短文,介绍电脑的发展变化,并谈谈你对电脑的看法并翻译...