MATLAB机器学习系列-7支持向量机原理及其代码实现
支持向量机原理
分类
如图,在分类中,我们需要找到一个超平面(图中包括间隔的平面)把圆圈和方框分开
原问题
间隔最小,同时保证真实输出和模型输出积大于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
- 随机产生训练集和测试集
n = randperm(size(matrix,1));
- 训练集——80个样本
train_matrix = matrix(n(1:80),:);
train_label = label(n(1:80),:);
- 测试集——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核函数)
- 寻找最佳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)];
- 创建/训练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支持向量机原理及其代码实现相关推荐
- 递归神经网络 matlab,机器学习系列:递归神经网络
原标题:机器学习系列:递归神经网络 前言 BP 神经网络,训练的时候,给定一组输入和输出,不断的对权值进行训练,使得输出达到稳定.但 BP 神经网络并不是适合所有的场景,并不真正的体现出某些场景的真正 ...
- MATLAB机器学习系列-9:决策树和随机森林的原理及其例子代码实现
决策树 原理 决策树通过把样本实例从根节点排列到某个叶子节点来对其进 行分类.树上的每个非叶子节点代表对一个属性取值的测试, 其分支就代表测试的每个结果:而树上的每个叶子节点均代表 一个分类的类别,树 ...
- MATLAB机器学习系列-8 极限学习机(Extreme Learning Machine, ELM)原理及其代码实现
极限学习机(Extreme Learning Machine, ELM) 极限学习机网络结构和BP网络结构类似. 和BP神经网络不同点: 极限学习机输入层到隐含层的权重W是可以随意指定的.BP神经网络 ...
- MATLAB机器学习系列-6 竞争神经网络与SOFM(SOM)神经网络原理及其例子代码
竞争神经网络 结构上和RBF等网络是比较像的.这里的距离是负数距离,||ndist||中带一个n,表示negative.在matlab中计算方法是ngedist. 它的计算过程是:待分类样本输入后,和 ...
- MATLAB机器学习系列-5 RBF、GRNN和PNN神经网络原理及其例子代码
RBF(径向基神经网络) GRNN广义神经网络 PNN概率神经网络 RBF算例实现(回归) 数据集 % 1. 导入数据 load spectra_data.mat NIR输入,octane输出 %% ...
- MATLAB机器学习系列-11:粒子群优化原理及其matlab实现
粒子群优化原理 粒子群算法思想来源于实际生活中鸟捕食的过程.假设在一个n维的空间中,有一群鸟(m只)在捕食,食物位于n维空间的某个点上,对于第i只鸟某一时刻来说,有两个向量描述,一个是鸟的位置向量,第 ...
- MATLAB机器学习系列-12:蚁群算法优化原理及其matlab实现
蚁群算法原理 概述 蚁群算法(Ant Colony Algorithm, ACA)由Marco Dorigo于1992年在他的博士论文中首次提出,该算法模拟了自然界中蚂蚁的觅食行为. 蚂蚁在寻找食物源 ...
- 【机器学习】 逻辑回归原理及代码
大家好,我是机器侠~ 1 Linear Regression(线性回归) 在了解逻辑回归之前,我们先简单介绍一下Linear Regression(线性回归). 线性回归是利用连续性的变量来预估实际数 ...
- MATLAB机器学习系列-4函数篇
Matlab中的函数及其调用 1.匿名函数 匿名函数格式 函数名=@(参数)(函数体): 如 myfundhd=@(x)(x+2); 我们可以在命令行窗口直接输入匿名函数,然后调用 或者在m文件点击执 ...
最新文章
- java中synchronized介绍和用法
- java 集合反射_关于granite源码包CollectionUtil集合工具类获取集合反射类型、实例化各种集合类型HashSet/ArrayList等...
- Hibernate问题浅析
- 升级遗留代码的最佳实践
- javascript实现图片放大镜效果
- Promise【面试】
- LeetCode513 找左下角的值
- 闲人闲谈PS之十四——幕墙工程系统化管理施工设计篇
- 手机wps怎么设置打印横竖_WPS中横竖打印怎么设置
- 基于Layui实现的树形菜单页面
- 程序员路在何方的辛苦工作
- 2021 HZNU Winter Training Day 17 (2018 German Collegiate Programming Contest (GCPC 18))
- 基金的估值原来这么简单,一文看懂
- 【Pytorch深度学习实践】B站up刘二大人课程笔记——目录与索引(已完结)
- java jdk 8学习笔记,Java JDK 8学习笔记 PDF_源雷技术空间
- 三小时,破解数据库智能管控中的奥秘
- 浅谈数据中心新型末端母线配电系统
- 数字图像处理论文解读- 双边滤波效果 - Bilateral Filtering for Gray and Color Image
- 帆软10.0突然出现黑色框线以及打印预览出现plain问题
- 再见,2020。你好,2021!
热门文章
- python实验七答案_Python实验报告七
- Minimum Diameter Tree
- Android ConstraintLayout ConstraintSet动态布局
- Android 短视频拍摄、拍照滤镜 第三方库SDK
- Android NDK
- String.format() 格式化字符串
- SQL语句中timestamp进行排序BUG
- Rearrange an array of positive and negative integers
- 2021高考成绩微信查询方法6,2021年高考成绩查询时间、入口及方法
- 有关计算机发展的英语作文,写一篇英语短文,介绍电脑的发展变化,并谈谈你对电脑的看法并翻译...