《MATLAB 神经网络43个案例分析》:第12章 初始SVM分类与回归

1. 前言

《MATLAB 神经网络43个案例分析》是MATLAB技术论坛(www.matlabsky.com)策划,由王小川老师主导,2013年北京航空航天大学出版社出版的关于MATLAB为工具的一本MATLAB实例教学书籍,是在《MATLAB神经网络30个案例分析》的基础上修改、补充而成的,秉承着“理论讲解—案例分析—应用扩展”这一特色,帮助读者更加直观、生动地学习神经网络。

《MATLAB神经网络43个案例分析》共有43章,内容涵盖常见的神经网络(BP、RBF、SOM、Hopfield、Elman、LVQ、Kohonen、GRNN、NARX等)以及相关智能算法(SVM、决策树、随机森林、极限学习机等)。同时,部分章节也涉及了常见的优化算法(遗传算法、蚁群算法等)与神经网络的结合问题。此外,《MATLAB神经网络43个案例分析》还介绍了MATLAB R2012b中神经网络工具箱的新增功能与特性,如神经网络并行计算、定制神经网络、神经网络高效编程等。

近年来随着人工智能研究的兴起,神经网络这个相关方向也迎来了又一阵研究热潮,由于其在信号处理领域中的不俗表现,神经网络方法也在不断深入应用到语音和图像方向的各种应用当中,本文结合书中案例,对其进行仿真实现,也算是进行一次重新学习,希望可以温故知新,加强并提升自己对神经网络这一方法在各领域中应用的理解与实践。自己正好在多抓鱼上入手了这本书,下面开始进行仿真示例,主要以介绍各章节中源码应用示例为主,本文主要基于MATLAB2015b(32位)平台仿真实现,这是本书第十二章初始SVM分类与回归实例,话不多说,开始!

2. MATLAB 仿真示例

打开MATLAB,点击“主页”,点击“打开”,找到示例文件
《MATLAB 神经网络43个案例分析》:第12章 初始SVM分类与回归
选中Chapter_ClassifyRegressUsingLibsvm.m,点击“打开”

Chapter_ClassifyRegressUsingLibsvm.m源码如下:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%功能:初识SVM分类与回归
%环境:Win7,Matlab2015b
%Modi: C.S
%时间:2022-06-13
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% 初识SVM分类与回归
% by 李洋(faruto)
% http://www.matlabsky.com
% Email:faruto@163.com
% http://weibo.com/faruto 
% http://blog.sina.com.cn/faruto
% 2013.01.01
%% A Little Clean Work
tic;
clear;
clc;
close all;
format compact;
%% 使用Libsvm进行分类的小例子
%{
一个班级里面有两个男生(男生1、男生2),两个女生(女生1、女生2),其中
男生1 身高:176cm 体重:70kg;
男生2 身高:180cm 体重:80kg;

女生1 身高:161cm 体重:45kg;
女生2 身高:163cm 体重:47kg;
如果我们将男生定义为1,女生定义为-1,并将上面的数据放入矩阵data中,
并在label中存入男女生类别标签(1、-1)
%}
data = [176 70;
        180 80;
        161 45;
        163 47];
label = [1;1;-1;-1];
%{
这样上面的data矩阵就是一个属性矩阵,行数4代表有4个样本,列数2表示属性有两个,
label就是标签(1、-1表示有两个类别:男生、女生)。
%}

% 利用libsvm建立分类模型
model = svmtrain(label,data);

%{
此时该班级又转来一个新学生,其
身高190cm,体重85kg
我们想给出其标签(想知道其是男[1]还是女[-1])
由于其标签我们不知道,我们假设其标签为-1(也可以假设为1) 
%}
testdata = [190 85];
testdatalabel = -1;

[predictlabel,accuracy] = svmpredict(testdatalabel,testdata,model);
predictlabel
if 1 == predictlabel
    disp('==该生为男生');
end
if -1 == predictlabel
    disp('==该生为女生');
end

% % 下面再使用libsvm工具箱本身带的测试数据heart_scale来进行一下测试
% 首先载入数据
load heart_scale;
data = heart_scale_inst;
label = heart_scale_label;

% 选取前200个数据作为训练集合,后70个数据作为测试集合
ind = 200;
traindata = data(1:ind,:);
trainlabel = label(1:ind,:);
testdata = data(ind+1:end,:);
testlabel = label(ind+1:end,:);

% 利用训练集合建立分类模型
model = svmtrain(trainlabel,traindata,'-s 0 -t 2 -c 1.2 -g 2.8');

% 利用建立的模型看其在训练集合上的分类效果
[ptrain,acctrain] = svmpredict(trainlabel,traindata,model);

% 预测测试集合标签
[ptest,acctest] = svmpredict(testlabel,testdata,model);
%% 使用Libsvm进行回归的小例子
% 生成待回归的数据
x = (-1:0.1:1)';
y = -x.^2;

% 建模回归模型
model = svmtrain(y,x,'-s 3 -t 2 -c 2.2 -g 2.8 -p 0.01');

% 利用建立的模型看其在训练集合上的回归效果
[py,mse] = svmpredict(y,x,model);

scrsz = get(0,'ScreenSize');
figure('Position',[scrsz(3)*1/4 scrsz(4)*1/6  scrsz(3)*4/5 scrsz(4)]*3/4);
plot(x,y,'o');
hold on;
plot(x,py,'r*');
legend('原始数据','回归数据');
grid on;

% 进行预测
testx = 1.1;
display('真实数据')
testy = -testx.^2

[ptesty,tmse] = svmpredict(testy,testx,model);
display('预测数据');
ptesty

%% Record Time
toc

添加完毕,点击“运行”,开始仿真,输出仿真结果如下:

Accuracy = 0% (0/1) (classification)
predictlabel =
     1
==该生为男生
Accuracy = 99.5% (199/200) (classification)
Accuracy = 68.5714% (48/70) (classification)
Mean squared error = 9.52768e-05 (regression)
Squared correlation coefficient = 0.999184 (regression)
真实数据
testy =
   -1.2100
Mean squared error = 0.0102555 (regression)
Squared correlation coefficient = -1.#IND (regression)
预测数据
ptesty =
   -1.1087
时间已过 0.131584 秒。

《MATLAB 神经网络43个案例分析》:第12章 初始SVM分类与回归

3. 小结

最强传统的分类识别方法,老一辈最喜欢的支持向量机出炉了,后续好几章都会介绍SVM相关的实例,用硕士导师的话说这是理论相当完备,且值得深入学习的一种分类识别方法,主要是逻辑清晰,脉络分明,所以好些年长的老师一直对它情有独钟,在深度学习与神经网络之前,SVM确实大放异彩,应用到生产生活的具体实践中过,自己的研究生祖传毕设车牌识别系统就是采用的SVM进行的车牌字符识别。对本章内容感兴趣或者想充分学习了解的,建议去研习书中第十二章节的内容。后期会对其中一些知识点在自己理解的基础上进行补充,欢迎大家一起学习交流。

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
心中带点小风骚的头像心中带点小风骚普通用户
上一篇 2022年6月15日 上午11:40
下一篇 2022年6月15日

相关推荐