以下内容基于MATLAB官网的介绍文档,进行了一点个人的理解和整理,不算原创,但也不是单纯的翻译。具体内容缺斤少两的,想看具体的英文内容请点击链接。
训练或交叉验证支持向量机(SVM)模型在低维或中维预测数据集上的一类和二类(binary)分类。fitcsvm支持使用核函数映射预测数据,并支持通过二次规划实现目标函数最小化的顺序最小优化(SMO,sequential minimal optimization)、迭代单数据算法(ISDA,iterative single data algorithm)或L1软边界最小化。
训练简单的二分类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
训练和交叉验证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
通过将所有的虹膜分配给同一个类来修改Fisher的虹膜数据集。在修改后的数据集中检测异常值,并确定异常值所占的预期比例。
但是我没看,嘿嘿
创建fisherris数据集的散点图。将绘图中网格的坐标视为来自数据集分布的新观测值,并通过将坐标分配给数据集中的三个类之一来查找类边界。
使用fitcsvm自动优化超参数。通过使用自动超参数优化,找到使交叉验证损失减少五倍的超参数。为了获得可重现性,设置随机种子random seed并使用“expected-improvement-plus”获取功能。
在实际应用中,可以考虑先找到合适的超参数,再进行具体的应用。
load ionosphere
rng default
Mdl = fitcsvm(X,Y,'OptimizeHyperparameters','auto',...
'HyperparameterOptimizationOptions',struct('AcquisitionFunctionName',...
'expected-improvement-plus'))
必须的输入参数主要有输入样本X,输入标签Y,这俩是最重要的,数据搞不好,效果就难保。
其它的就是一些网络训练的设置,包括交叉验证、优化算法、核函数等等,还是挺多的,一般来说涉及到SVM的具体应用,就应该考虑研究这些参数了。这里就不多做介绍了,以后有缘使用的话再研究研究。
fitcsvm函数的输出就是经过训练的SVM分类模型,包括分类SVM模型()和经过交叉验证的SVM分类模型()两种。想调用输出模型的属性,使用点表示法。例如,输入‘m.Alpha’在命令窗口中显示模型m的拉格朗日乘数。
此外,More About、Tips、Algorithms等模块也有很多的内容可以学习。