傻瓜攻略(十七)——MATLAB实现SVM二分类之fitcsvm

以下内容基于MATLAB官网的介绍文档,进行了一点个人的理解和整理,不算原创,但也不是单纯的翻译。具体内容缺斤少两的,想看具体的英文内容请点击链接fitcsvm

fitcsvm

fitcsvm训练或交叉验证支持向量机(SVM)模型在低维或中维预测数据集上的一类和二类(binary)分类。fitcsvm支持使用核函数映射预测数据,并支持通过二次规划实现目标函数最小化的顺序最小优化(SMO,sequential minimal optimization)、迭代单数据算法(ISDA,iterative single data algorithm)或L1软边界最小化。

几个例子

Train SVM Classifier

训练简单的二分类SVM,使用的是二维坐标数据X,可以通过坐标图可视化分类效果。

% 导入数据,加载Fisher的虹膜数据集。去除萼片的长度和宽度以及所有观察到的刚毛鸢尾。
load fisheriris
inds = ~strcmp(species,'setosa');
X = meas(inds,3:4);
y = species(inds);

% 利用处理后的数据集训练支持向量机分类器。
SVMModel = fitcsvm(X,y)

% SVMModel是一个经过训练的ClassificationSVM分类器。显示SVMModel的属性,可以使用点表示法如下。
classOrder = 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

Train and Cross-Validate SVM Classifier

训练和交叉验证SVM分类器,X为351个34维的样本。使用RBF径向基核训练SVM分类器。

% Load the ionosphere data set.加载数据集。
load ionosphere
rng(1); % For reproducibility

% 使用RBF径向基核训练SVM分类器。
% 让程序找到内核函数的比例值。标准化预测变量。SVMModel是一个经过训练的ClassificationSVM分类器。
SVMModel = fitcsvm(X,Y,'Standardize',true,'KernelFunction','RBF',...
    'KernelScale','auto');

% 对SVM分类器进行交叉验证。 默认情况下,该软件使用10倍交叉验证。CVSVMModel是一个ClassificationPartitionedModel交叉验证的分类器。
CVSVMModel = crossval(SVMModel);

% 计算样本外分类错误率和准确率。
classLoss = kfoldLoss(CVSVMModel);
disp('验证准确率:')
acc = (1-classLoss)*100

Detect Outliers Using SVM and One-Class Learning

通过将所有的虹膜分配给同一个类来修改Fisher的虹膜数据集。在修改后的数据集中检测异常值,并确定异常值所占的预期比例。
但是我没看,嘿嘿

Find Multiple Class Boundaries Using Binary SVM

创建fisherris数据集的散点图。将绘图中网格的坐标视为来自数据集分布的新观测值,并通过将坐标分配给数据集中的三个类之一来查找类边界。

Optimize SVM Classifier

使用fitcsvm自动优化超参数。通过使用自动超参数优化,找到使交叉验证损失减少五倍的超参数。为了获得可重现性,设置随机种子random seed并使用“expected-improvement-plus”获取功能。

在实际应用中,可以考虑先找到合适的超参数,再进行具体的应用。

load ionosphere
rng default
Mdl = fitcsvm(X,Y,'OptimizeHyperparameters','auto',...
    'HyperparameterOptimizationOptions',struct('AcquisitionFunctionName',...
    'expected-improvement-plus'))

输入参数Input Arguments

必须的输入参数主要有输入样本X,输入标签Y,这俩是最重要的,数据搞不好,效果就难保。

其它的就是一些网络训练的设置,包括交叉验证、优化算法、核函数等等,还是挺多的,一般来说涉及到SVM的具体应用,就应该考虑研究这些参数了。这里就不多做介绍了,以后有缘使用的话再研究研究。

输出参数Output Arguments

fitcsvm函数的输出就是经过训练的SVM分类模型,包括分类SVM模型(ClassificationSVM)和经过交叉验证的SVM分类模型(ClassificationPartitionedModel)两种。想调用输出模型的属性,使用点表示法。例如,输入‘m.Alpha’在命令窗口中显示模型m的拉格朗日乘数。

更多

此外,More About、Tips、Algorithms等模块也有很多的内容可以学习。

  • 30
    点赞
  • 180
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值