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 条评论
登录 后参与评论

相关文章

来自专栏机器之心

深度 | 理解神经网络中的目标函数

选自Kdnuggets 作者:Lars Hulstaert 机器之心编译 参与:晏奇、李泽南 本文面向稍有经验的机器学习开发者,来自微软的 Lars Hulst...

3039
来自专栏专知

【干货】计算机视觉实战系列06——用Python做图像处理

【导读】专知成员Hui上一次为大家介绍主成分分析(PCA)、以及其在图像上的应用,这一次为大家详细讲解SciPy库的使用以及图像高斯模糊实战。 【干货】计算机视...

35014
来自专栏JasonhavenDai

统计学习方法之朴素贝叶斯1.概述2.基础知识3.基本方法4.参数估计5.简单实现

1.概述 朴素贝叶斯分类是贝叶斯分类器的一种,贝叶斯分类算法是统计学的一种分类方法,利用概率统计知识进行分类,其分类原理就是利用贝叶斯公式根据某对象的先验概率计...

3858
来自专栏计算机视觉战队

详聊CNN的精髓

现在的深度学习发展速度已经超出每个人的想象,很大一部分人只是觉得我用他人的框架去实现自己的目的,并且效果很好就可以了,这也是现在一大部分的一个瓶颈。曾经有一个老...

3525
来自专栏张俊红

EM算法

总第82篇 01|概念及原理: EM算法是一种迭代算法,用于含有隐变量的概率模型参数的极大似然估计,或极大后验概率估计。EM算法的每次迭代分两步完成:E步,求期...

2486
来自专栏智能算法

机器学习三人行(系列三)----end-to-end机器学习

系列二我们详细介绍了数据下载,数据透析以及数据的不同分组方式,详情请参考:机器学习三人行(系列二)----机器学习前奏,洞悉数据之美!。但是在真正进行训练之前,...

3428
来自专栏机器学习算法全栈工程师

机器学习中的超参数的选择与交叉验证

1. 超参数有哪些   与超参数对应的是参数。参数是可以在模型中通过BP(反向传播)进行更新学习的参数,例如各种权值矩阵,偏移量等等。超参数是需要进行程序员自己...

3269
来自专栏人工智能

线性神经网络

自适应线性元件也是早期的神经网络模型之一,其学习算法称为LMS(Least Mean Squares)算法。Adaline网络与感知器网络非常相似,只是神经元的...

1928
来自专栏瓜大三哥

线性神经网络

自适应线性元件也是早期的神经网络模型之一,其学习算法称为LMS(Least Mean Squares)算法。Adaline网络与感知器网络非常相似,只是神经元的...

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

机器学习中防止过拟合的处理方法

我们都知道,在进行数据挖掘或者机器学习模型建立的时候,因为在统计学习中,假设数据满足独立同分布(i.i.d,independently and...

3265

扫码关注云+社区