matlab的支持向量机SVM怎么用
这篇文章主要介绍"matlab的支持向量机SVM怎么用"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"matlab的支持向量机SVM怎么用"文章能帮助大家解决问题。
支持向量机(Support Vector Machine)名字听起来很炫,功能也很炫,但公式理解起来却有眩晕感。所以不用公式来说明SVM的原理,理解SVM有四个关键名词:分离超平面、最大边缘超平面、软边缘、核函数。
分离超平面(separating hyperplane):处理分类问题的时候需要一个决策边界,好象楚河汉界一样,在界这边我们判别A,在界那边我们判别B。这种决策边界将两类事物相分离,而线性的决策边界就是分离超平面。
最大边缘超平面(Maximal Margin Hyperplane):分离超平面可以有很多个,怎么找最好的那个呢,SVM的作法是找一个"最中间"的。换句话说,就是这个平面要尽量和两边保持距离,以留足余量,减小泛化误差,保证稳健性。或者用中国人的话讲叫做"执中"。以江河为国界的时候,就是以航道中心线为界,这个就是最大边缘超平面的体现。在数学上找到这个最大边缘超平面的方法是一个二次规划问题。
软边缘(Soft Margin):但世界上没这么美的事,很多情况下都是"你中有我,我中有你"的混杂状态。不大可能用一个平面完美的分离两个类别。在线性不可分情况下就要考虑软边缘了。软边缘可以破例允许个别样本跑到其它类别的地盘上去。但要使用参数来权衡两端,一个是要保持最大边缘的分离,另一个要使这种破例不能太离谱。这种参数就是对错误分类的惩罚程度C。
核函数(Kernel Function),为了解决完美分离的问题,SVM还提出一种思路,就是将原始数据映射到高维空间中去,直觉上可以感觉高维空间中的数据变的稀疏,有利于"分清敌我"。那么映射的方法就是使用"核函数"。如果这种"核技术"选择得当,高维空间中的数据就变得容易线性分离了。而且可以证明,总是存在一种核函数能将数据集映射成可分离的高维数据。看到这里各位不要过于兴奋,映射到高维空间中并非是有百利而无一害的。维数过高的害处就是会出现过度拟合。
所以选择合适的核函数以及软边缘参数C就是训练SVM的重要因素。一般来讲,核函数越复杂,模型越偏向于拟合过度。在参数C方面,它可以看作是LASSO算法中的lambda的倒数,C越大模型越偏向于拟合过度,反之则拟合不足。实际问题中怎么选呢?用人类最古老的办法,试错。
常用的核函数有如下种类:
Linear:使用它的话就成为线性向量机,效果基本等价于Logistic回归。但它可以处理变量极多的情况,例如文本挖掘。
polynomial:多项式核函数,适用于图像处理问题。
Radial basis,高斯核函数,最流行易用的选择。参数包括了sigma,其值若设置过小,会有过度拟合出现。
sigmoid:反曲核函数,多用于神经网络的激活函数。
最后分别解释"支持向量"和"机"
(1) "机" -- Classification Machine,分类器。
(2) "支持向量" -- 在maximum margin上的这些点就叫支持向量,最后的classification machine的表达式里只含这些"支持向量"的信息
%% 去除花萼的长度、宽度和其中一种鸢尾花
load fisheriris
inds = ~strcmp(species,'setosa');
X = meas(inds,3:4);
y = species(inds);
%% 使用处理后的数据集训练SVM分类器
SVMModel = fitcsvm(X,y);
% 显示类别
disp(SVMModel.ClassNames)
%% 绘制数据的散点图并圈出支持向量
sv = SVMModel.SupportVectors;
figure
gscatter(X(:,1),X(:,2),y)
hold on
plot(sv(:,1),sv(:,2),'ko','MarkerSize',10)
legend('versicolor','virginica','Support Vector')
hold off
使用的数据为MATLAB自带鸢尾花样本
关于"matlab的支持向量机SVM怎么用"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注行业资讯频道,小编每天都会为大家更新不同的知识点。