matlab svmtrain和svmclassify函数使用示例

监督式学习(Supervised Learning)常用算法包括:线性回归(Linear Regression)、逻辑回归(Logistic Regression)、神经网络(Neural Network)以及支持向量机(Support Vector Machine,SVM)等。支持向量机与逻辑回归算法类似,都是解决二分类或多分类问题,但是SVM在非线性回归预测方面具有更优秀的分类效果,所以SVM又被称为最大间距分类器。

本文不对支持向量机的原理进行详细解释,直接运用matlab自带的工具箱函数svmtrain、svmclassify解决实际的二分类问题。

导入数据:

clear; close all; clc;
%% ================ load fisheriris.mat ================
load fisheriris.mat

1、对于线性分类问题,我们选取线性核函数,原始数据包括训练数据和测试数据两部分。

data = meas(51:end,3:4);                % column 3,column 4作为特征值
group = species(51:end);                % 类别
idx = randperm(size(data,1));
N = length(idx);

% SVM train
T = floor(N*0.9);                       % 90组数据作为训练数据
xdata = data(idx(1:T),:);
xgroup = group(idx(1:T));
svmStr = svmtrain(xdata,xgroup,'Showplot',true);

训练过程得到结构体svmStr,对测试数据进行预测

% SVM predict
P = floor(N*0.1);                       % 10组预测数据
ydata = data(idx(T+1:end),:);
ygroup = group(idx(T+1:end));
pgroup = svmclassify(svmStr,ydata,'Showplot',true);     % svm预测
hold on;
plot(ydata(:,1),ydata(:,2),'bs','Markersize',12);
accuracy1 = sum(strcmp(pgroup,ygroup))/P*100;            % 预测准确性
hold off;

程序运行结果如下:

图中,方块*号表示测试数据的预测结果,accuracy1结果为90%(上下浮动)。

2、对于非线性分类问题,我们选取高斯核函数RBF,原始数据包括训练数据和测试数据两部分。

训练过程前,导入原始数据:

data = meas(51:end,1:2);                % column 1,column 2作为特征值
group = species(51:end);                % 类别
idx = randperm(size(data,1));
N = length(idx);

% SVM train
T = floor(N*0.9);                       % 90组数据作为训练数据
xdata = data(idx(1:T),:);
xgroup = group(idx(1:T));

对于高斯核函数,有两个参数对SVM的分类效果有着重要的影响:一个是sigma;另一个是C。

首先讨论sigma的影响,sigma反映了RBF函数从最大值点向周围函数值下降的速度,sigma越大,下降速度越慢,对应RBF函数越平缓;sigma越小,下降速度越快,对应RBF函数越陡峭。对于不同的sigma,程序代码:

% different sigma
figure;
sigma = 0.5;
svmStr = svmtrain(xdata,xgroup,'kernel_function','rbf','rbf_sigma',...
    sigma,'showplot',true);
title('sigma = 0.5');
figure;
sigma = 1;
svmStr = svmtrain(xdata,xgroup,'kernel_function','rbf','rbf_sigma',...
    sigma,'showplot',true);
title('sigma = 1');
figure;
sigma = 3;
svmStr = svmtrain(xdata,xgroup,'kernel_function','rbf','rbf_sigma',...
    sigma,'showplot',true);
title('sigma = 3');

分类平面分别如下:

从图中可以看出,sigma越小,分类曲线越复杂,事实也确实如此。因为sigma越小,RBF函数越陡峭,下降速度越大,预测过程容易发生过拟合问题,使分类模型对训练数据过分拟合,而对测试数据预测效果不佳。

然后讨论C的影响,程序代码如下:

% different C
figure;
C = 1;
svmStr = svmtrain(xdata,xgroup,'kernel_function','rbf','boxconstraint',...
    C,'showplot',true);
title('C = 0.1');
figure;
C = 8;
svmStr = svmtrain(xdata,xgroup,'kernel_function','rbf','boxconstraint',...
    C,'showplot',true);
title('C = 1');
figure;
C = 64;
svmStr = svmtrain(xdata,xgroup,'kernel_function','rbf','boxconstraint',...
    C,'showplot',true);
title('C = 10');

分类平面如下:

从图中可以发现,C越大,分类曲线越复杂,也就是说越容易发生过拟合,因为C对应逻辑回归的lambda的倒数。

若令sigma=1,C=1,则对测试数据的预测程序:

% SVM predict
P = floor(N*0.1);                       % 10组预测数据
ydata = data(idx(T+1:end),:);
ygroup = group(idx(T+1:end));
% sigma = 1,C = 1,default
figure;
svmStr = svmtrain(xdata,xgroup,'kernel_function','rbf','showplot',true);
pgroup = svmclassify(svmStr,ydata,'Showplot',true);     % svm预测
hold on;
plot(ydata(:,1),ydata(:,2),'bs','Markersize',12);
accuracy2 = sum(strcmp(pgroup,ygroup))/P*100;            % 预测准确性
hold off;

程序运行结果如下:

图中,方块*号表示测试数据的预测结果,accuracy2结果为70%(上下浮动)。

分类效果不佳因为两个特征量的选择,可以选择更合适的特征量。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏人工智能

卷积神经网络之卷积操作

深度学习是一个目前非常火热的机器学习分支,而卷积神经网络(CNN)就是深度学习的一个代表性算法。CNN主要用来解决图像相关的问题,目前,单张图片的识别问题已基本...

2017
来自专栏智能算法

图像金字塔分层算法

一. 图像金字塔概述 1. 图像金字塔是图像中多尺度表达的一种,最主要用于图像的分割,是一种以多分辨率来解释图像的有效但概念简单的结构。 2. 图像金字塔最初用...

5186
来自专栏机器学习从入门到成神

机器学习之深入理解神经网络理论基础、BP算法及其Python实现

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_35512245/articl...

2201
来自专栏老秦求学

决策树(ID3,C4.5,CART)原理以及实现

决策树是一种基本的分类和回归方法.决策树顾名思义,模型可以表示为树型结构,可以认为是if-then的集合,也可以认为是定义在特征空间与类空间上的条件概率分布.

1701
来自专栏智能算法

机器学习三人行(系列六)----Logistic和Softmax回归实战剖析(附代码)

本文主要实战Logistic回归和softmax回归在iris数据集上的应用,通过该文章,希望我们能一起掌握该方面的知识。 1. Logistic回归 我们在系...

67710
来自专栏机器学习算法工程师

LSTM模型与前向反向传播算法

在循环神经网络(RNN)模型与前向反向传播算法中,我们总结了对RNN模型做了总结。由于RNN也有梯度消失的问题,因此很难处理长序列的数据,大牛们对RNN做了改...

5393
来自专栏SIGAI学习与实践平台

【免费线上实践】动手训练模型系列:梯度消失

本模型实现对512*512图像的像素二分类问题;红色或蓝色的样本点(每个样本包含坐标(x,y)值)坐落在对应颜色的区域内则样本正确分类,反之分类错误。 loss...

1024
来自专栏人工智能

课后作业(二):如何用一个只有一层隐藏层的神经网络分类Planar data

来源:sandipanweb 编译:Bot 编者按:之前,论智曾在TOP 10:初学者需要掌握的10大机器学习(ML)算法介绍了一些基础算法及其思路,为了与该帖...

1956
来自专栏大数据挖掘DT机器学习

机器学习线性分类算法:感知器原理

感知器PLA是一种最简单,最基本的线性分类算法(二分类)。其前提是数据本身是线性可分的。 模型可以定义为 ? ,sign函数是阶跃函数,阈值决定取0或1。 模型...

4456
来自专栏PPV课数据科学社区

【算法】什么是神经网络?

本文结构: 什么是神经网络 什么是神经元 神经网络的计算和训练 代码实现 1. 什么是神经网络 神经网络就是按照一定规则将多个神经元连接起来的网络 例如全连接(...

4379

扫码关注云+社区

领取腾讯云代金券