当您的数据恰好两个类时,您可金宝app以使用支持向量机(SVM)。SVM通过查找最佳的超平面来分类数据,该超平面将从其他类的那些分隔一个类的所有数据点。这最好的SVM的超平面意味着最大的保证金在两个班之间。边际是指平行于没有内部数据点的超平面的板的最大宽度。
这金宝app支持向量是离分离超平面最近的数据点;这些点都在板的边界上。下图说明了这些定义,+表示类型1的数据点,-表示类型- 1的数据点。
数学制定:原始。此讨论遵循Hastie,Tibshirani和Friedman[1]还有克里斯琴尼尼和肖-泰勒[2].
培训数据是一组点(矢量)Xj以及他们的类别yj.对于一些维度D., 这Xj∊R.D.,yj=±1.超平面的方程是
在哪里β∊R.D.和B.是一个实数。
以下问题定义了最好的分离超平面(即决策边界)。找到β和B.这最小化| |β||这对于所有数据点(Xj那yj),
支持向量金宝app是Xj在边界上,那些
为了数学上的方便,这个问题通常用最小化的等价问题给出 .这是一个二次编程问题。最佳解决方案 启用传染媒介的分类Z.如下:
是分数分数并代表距离Z.来自决策边界。
数学公式:双。对偶二次规划问题的求解在计算上比较简单。为了得到对偶,取正的拉格朗日乘数α.j乘以每个约束条件,从目标函数中减去:
你在哪里寻找静止点L.P.超过β和B..设置渐变L.P.到0,你得到
(1) |
替换为L.P.,你得到了双重的L.D.:
你将其最大化α.j≥0.一般来说,很多α.j最大值为0。非零α.j在对偶问题的解中定义超平面,如等式1, 这使β作为α.jyjXj.数据点Xj对应于零α.j是金宝app支持向量.
的导数L.D.关于非零α.j0处为0。这给了
特别地,它给出的值是B.在解决方案中,采取任何方法j与非零α.j.
对偶问题是一个标准的二次规划问题。例如,最优化工具箱™Quadprog.
(优化工具箱)Solver解决这类问题。
您的数据可能不允许一个分离的超平面。在这种情况下,SVM可以使用软边缘,意味着一个超平面,分开许多,但不是所有数据点。
软边距有两种标准公式。两者都需要添加松弛变量ξj还有一个惩罚参数C.
这L.1-norm问题是:
这样
这L.1-norm指使用ξj作为松弛变量而不是它们的正方形。三个求解器选项SMO
那ISDA
,L1QP
的fitcsvm.
最小化L.1规范的问题。
这L.2-norm问题是:
受相同的约束。
在这些公式中,你可以看到这种增长C将更多的权重放在松弛变量上ξj,这意味着优化尝试在类之间进行更严格的分离。等效,还原C朝向0使错误分类不太重要。
数学公式:双。为了更容易计算,考虑一下L.1这种软保证金制剂的双重问题。使用拉格朗日乘法器μ.j,最小化的功能L.1-norm问题是:
你在哪里寻找静止点L.P.超过β那B.和积极的ξj.设置渐变L.P.到0,你得到
这些方程直接导致双重制定:
受限制
最后一组不等式,0≤α.j≤C显示,为什么C有时被称为箱约束.C保持拉格朗日乘数的允许值α.j在“框”中,一个有界区域。
的梯度方程B.给出解决方案B.就这组非零而言α.j,对应于支持向量。金宝app
你可以写作并解决双重的L.2-范数问题。详情请参见克里斯蒂安尼尼和肖-泰勒[2]第六章。
fitcsvm.
执行。双重软保证金问题都是二次编程问题。在内部,fitcsvm.
有几种不同的算法来解决这个问题。
对于单级或二进制分类,如果您未在数据中设置一小部分预期异常值(请参阅OutlierFraction.
),然后默认求解器是顺序最小优化(SMO)。SMO通过一系列两点最小化最小化一个规范问题。在优化期间,SMO尊重线性约束
并明确地包括模型中的偏置术语。Smo相对较快。有关SMO的更多详情,请参阅[3].
对于二进制分类,如果在数据中设置一小部分预期异常值,则默认解算器是迭代单数据算法。像Smo一样,ISDA解决了一个规范的问题。与SMO不同,ISDA通过一系列最小化的系列最小化,不尊重线性约束,并且没有明确地包括模型中的偏置术语。有关ISDA的更多详细信息,请参阅[4].
对于一个类或二进制分类,如果您有一个Optimization Toolbox许可证,您可以选择使用Quadprog.
(优化工具箱)解决一个规范的问题。Quadprog.
使用大量的内存,但解决二次程序的高度精度。有关详细信息,请参见二次规划的定义(优化工具箱).
一些二进制分类问题没有一个简单的超平面作为有用的分离标准。对于那些问题,存在数学方法的变种,其保留了几乎所有SVM分离过平面的简单性。
这种方法使用这些结果来自再现核的理论:
有一类函数G(X1那X2),使用以下属性。有一个线性空间S.和一个功能φ.映射X来S.这样
G(X1那X2)= <φ.(X1),φ.(X2) >。
点产品发生在空间中S..
这类函数包括:
多项式:对于一些正整数P.那
G(X1那X2) = (1 +X1'X2)P..
径向基函数(高斯):
G(X1那X2) = exp(∥X1-X2)∥2).
多层erceptron或sigmoid(神经网络):正数P.1和一个负数P.2那
G(X1那X2) =双曲正切(P.1X1'X2+P.2).
笔记
不是每套P.1和P.2生成一个有效的重新生成内核。
fitcsvm.
不支持sigmoi金宝appd内核。相反,您可以通过使用“KernelFunction”
名称-值对的论点。有关详细信息,请参见使用自定义内核列车SVM分类器.
使用核的数学方法依赖于超平面的计算方法。超平面分类的所有计算都使用点积。下载188bet金宝搏因此,非线性核可以使用相同的计算和求解算法,得到非线性的分类器。得到的分类器是某些空间中的超曲面S.,但空间S.不必识别或检查。
与任何有监督学习模型一样,您首先训练一个支持向量机,然后交叉验证分类器。金宝app使用经过训练的机器对新数据进行分类(预测)。此外,为了获得满意的预测精度,可以使用各种SVM核函数,并且必须对核函数的参数进行调优。
使用SVM分类器训练并可选地交叉验证fitcsvm.
.最常见的语法是:
svmmodel = fitcsvm(x,y,'kernelfunction','rbf',...'标准化',true,'classnames',{'negclass','posclass'});
输入是:
X
-预测器数据矩阵,其中每一行是一个观察,每列是一个预测器。
y
—类标签的数组,每行对应于in中相应行的值X
.y
可以是类别、字符或字符串数组、逻辑或数字向量,或字符向量的单元格数组。
KernelFunction
- 默认值是“线性”
对于两类学习,它将数据与超平面分开。价值“高斯”
(或者“rbf”
)是一个类别学习的默认值,并指定使用高斯(或径向基函数)内核。成功培训SVM分类器的一个重要步骤是选择适当的内核功能。
标准化
-表示软件在训练分类器之前是否应该标准化预测器的标志。
Classnames.
—区分负类和正类,或指定数据中包含哪些类。负类是第一个元素(或字符数组的行),例如:'negclass'
,并且正类是第二个元素(或字符阵列的行),例如,'posclass'
.Classnames.
必须是相同的数据类型y
.指定类名是一种很好的实践,特别是在比较不同分类器的性能时。
由此产生的培训模型(SVMModel
)包含SVM算法的优化参数,使您能够对新数据进行分类。
对于您可以使用的更多名称 - 值对来控制培训,请参阅fitcsvm.
参考页面。
使用新数据来分类预测
.使用培训的SVM分类器对新数据进行分类的语法(SVMModel
)是:
(标签,分数)=预测(SVMModel newX);
得到的矢量,标签
,表示中每一行的分类X
.分数
是一个N-2-2软分数矩阵。每行对应于一行X
,这是一个新的观察。第一列包含用于在负类中分类的观察的分数,第二列包含在正类中分类的分数观察。
估计后验概率而不是分数,首先通过训练有素的SVM分类器(SVMModel
)fitPosterior
,这适合分数的分数到后概率转换函数。语法是:
scorsvmmodel = fitposterior(svmmodel,x,y);
房地产scoretransform.
的分类器scorsvmmodel.
包含最优变换函数。通过scorsvmmodel.
来预测
.而不是返回分数,输出参数分数
包含在负数中分类的观察的后验概率(第1列)分数
)或正数(第2列分数
) 班级。
使用'OptimizeHyperParameters'
的名称-值对参数fitcsvm.
查找最小化交叉验证损失的参数值。符合条件的参数是“BoxConstraint”
那“KernelFunction”
那'kernelscale'
那“PolynomialOrder”
,'标准化'
.例如,请参见优化SVM分类器使用Bayesian Optimization.或者,您可以使用Bayesopt.
功能,如图所示使用Budesopt优化交叉验证的SVM分类器.这Bayesopt.
功能允许更灵活地自定义优化。你可以使用Bayesopt.
功能优化任何参数,包括当您使用时不符合优化的参数fitcsvm.
功能。
你也可以尝试根据这个方案手动调优分类器的参数:
将数据传递给fitcsvm.
,并设置名称值对参数'kernelscale','auto'
.假设培训的SVM模型被调用SVMModel
.该软件使用启发式过程来选择内核比例。启发式程序使用子采样。因此,要重现结果,请使用随机数种子使用rng
在训练分类器之前。
通过将其传递给验证分类器横梁
.默认情况下,软件进行10倍交叉验证。
通过交叉验证的支持向量机模型kfoldLoss
估计并保留分类错误。
重新培训SVM分类器,但调整'kernelscale'
和“BoxConstraint”
名称-值对参数。
boxconstraint.
- 一个策略是尝试框约束参数的几何序列。例如,占用11个值,来自1 e-5
来1E5.
一个因素10.增加boxconstraint.
可能会减少支持向量的数量,但也可能会增加训练时间。金宝app
内塞尔
-一种策略是尝试在原始核尺度上缩放RBF sigma参数的几何序列。通过:
检索原始内核刻度,例如,ks
,使用DOT表示法:ks = svmmodel.kernelparameters.scale.
.
用作新内核标度原件的因素。例如,乘法ks
通过11个值1 e-5
来1E5.
,增长了10倍。
选择产生最低分类错误的模型。您可能希望进一步优化您的参数以获得更好的准确性。从初始参数开始并执行另一个交叉验证步骤,这次使用1.2因子。
此示例显示如何使用高斯内核功能生成非线性分类器。首先,在两个维度中生成一类单元盘中的一类点,并且从半径1到半径2中的一个环中的另一类点。然后,基于具有高斯径向基函数内核的数据生成分类器。由于模型是圆对称的,因此默认的线性分类器显然是不合适的。将框约束参数设置为INF.
要进行严格的分类,即没有分类错误的训练点。其他内核函数可能无法使用这个严格的框约束,因为它们可能无法提供严格的分类。尽管rbf分类器可以分离类,但结果可能训练过度。
生成均匀分布在单位磁盘上的100个点。为此,生成一个半径R.作为均匀随机变量的平方根,生成一个角度T.统一在(0, ),并放在(R.Cos(T.),R.sin (T.))。
RNG(1);重复性的%r = sqrt(rand(100,1));% 半径t = 2 * pi * rand(100,1);% 角度Data1 = [r.*cos(t), r.*sin(t)];%点
产生100个点均匀分布在环空中。半径再次与平方根成比例,这次从1到4的均匀分布的平方根。
r2 =√3 *兰德(100 1)+ 1);% 半径t2 = 2 * pi * rand(100,1);% 角度Data2 = [r2.*cos(t2), r2.*sin(t2)];%点
绘制这些点,并绘制半径为1和2的圆以作比较。
图;绘图(data1(:,1),data1(:,2),'r。'那“MarkerSize”,15)持有在情节(data2(: 1)、data2 (:, 2),'b。'那“MarkerSize”15) ezpolar (@ (x) 1); ezpolar (@ (x) 2);轴平等的抓住从
将数据放入一个矩阵中,并做一个分类向量。
data3 = [data1; data2);theclass = 1 (200 1);theclass (1:10 0) = 1;
培训SVM分类器KernelFunction
设置“rbf”
和boxconstraint.
设置INF.
.绘制决策边界并标记支持向量。金宝app
%训练SVM分类器成立这个,课程cl = fitcsvm (data3,“KernelFunction”那“rbf”那...“BoxConstraint”,inf,'classnames'[1]);在网格上预测分数d = 0.02;[x1grid,x2grid] = meshgrid(min(data3(:,1)):d:max(data3(:1)),...分钟(data3 (:, 2)): d:马克斯(data3 (:, 2)));xGrid = [x1Grid (:), x2Grid (:));[~,分数]=预测(cl, xGrid);%绘制数据和决策边界图;h(1:2)= g箭头(data3(:,1),data3(:,2),theclass,rb的那'。');抓住在ezpolar (@ (x) 1);h(3) =情节(data3 (cl.IsSu金宝apppportVector, 1), data3 (cl.IsSupportVector, 2),“柯”);轮廓(x1grid,x2grid,重塑(分数(:,2),尺寸(x1grid)),[0 0],'K');传奇(H,{' 1 '那“+ 1”那'金宝app支持vectors'});轴平等的抓住从
fitcsvm.
生成一个接近半径为1的圆的分类器。这种差异是由于随机训练数据造成的。
使用默认参数的培训使得更近一的循环分类边界,但其中错误分类了一些培训数据。此外,默认值boxconstraint.
是1
,因此有更多的支持向量。金宝app
成立这个,课程cl2 = fitcsvm (data3,“KernelFunction”那“rbf”);[〜,scors2] =预测(CL2,XGRID);图;h(1:2)= g箭头(data3(:,1),data3(:,2),theclass,rb的那'。');抓住在ezpolar (@ (x) 1);h(3)= plot(data3(cl2.iss金宝appupportvector,1),data3(cl2.issupportvector,2),“柯”);轮廓(x1Grid x2Grid,重塑(scores2(:, 2),大小(x1Grid)), [0 0),'K');传奇(H,{' 1 '那“+ 1”那'金宝app支持vectors'});轴平等的抓住从
此示例显示如何使用自定义内核函数,例如Sigmoid内核,训练SVM分类器,并调整自定义内核功能参数。
在单位圆内生成一组随机点。在第一和第三象限的标记点属于正类,而在第二和第四象限的标记点属于负类。
RNG(1);重复性的%n = 100;%每象限的点数r1 =√兰特(2 * n, 1));%随机半径t1 = [pi / 2 * rand(n,1);(PI / 2 * rand(n,1)+ pi)];Q1和Q3的%随机角度X1 = [r1.*cos(t1) r1.*sin(t1)];% Polar-to-Cartesian转换R2 = SQRT(RAND(2 * N,1));t2 = [pi / 2 * rand(n,1)+ pi / 2;(PI / 2 * rand(n,1)-pi / 2)];Q2和Q4的%随机角度x2 = [r2。* cos(t2)r2。* sin(t2)];x = [x1;x2];%预测y =那些(4 * n,1);Y(2 * n + 1:结束)= -1;% 标签
图数据。
图;g箭偶(x(:,1),x(:,2),y);标题(“模拟数据散点图”)
写一个在要素空间中接受两个矩阵的函数作为输入,并使用Sigmoid内核将它们转换为Gram矩阵。
函数G = mysigmoid (U, V)斜率伽马和拦截c%sigmoid内核函数伽玛= 1;c = -1;g = tanh(gamma * u * v'+ c);结尾
将此代码保存为命名的文件mysigmoid.
在您的MATLAB®路径。
使用s形核函数训练SVM分类器。将数据标准化是一个很好的做法。
Mdl1 = fitcsvm (X, Y,“KernelFunction”那“mysigmoid”那'标准化',真正的);
Mdl1
是一个分类VM.
包含估计参数的分类器。
绘制数据,并识别支持向量和决策边界。金宝app
%在网格上计算分数d = 0.02;%网格的步长[x1Grid, x2Grid] = meshgrid (min (X (: 1)): d:马克斯(X (: 1))...min(x(:,2)):d:max(x(:,2)));xGrid = [x1Grid (:), x2Grid (:));%网格[〜,scorS1] =预测(MDL1,XGRID);%的分数图;h(1:2)= g箭偶(x(:,1),x(:,2),y);抓住在h(3)= plot(x(mdl1.iss金宝appupportvector,1),...x(mdl1.is金宝appsupportVector,2),“柯”那“MarkerSize”,10);%支金宝app持向量轮廓(x1grid,x2grid,重塑(scores1(:,2),size(x1grid)),[0 0],'K');%的决策边界标题(“带有决策边界的散点图”) 传奇({' 1 '那'1'那'金宝app支持vectors'},“位置”那'最好的事物');抓住从
您可以调整内核参数,以尝试改进决策边界的形状。这也可能降低样本内误分类率,但是,您应该首先确定样本外误分类率。
通过使用10倍交叉验证来确定样品超出错误分类率。
cvmdl1 = crossval(mdl1);misclass1 = kfoldloss(cvmdl1);misclass1.
misclass1 = 0.1350
样品外错误分类率为13.5%。
写另一个sigmoid函数,但设置伽玛= 0.5;
.
函数g = mysigmoid2(u,v)斜率伽马和拦截c%sigmoid内核函数伽玛= 0.5;c = -1;g = tanh(gamma * u * v'+ c);结尾
将此代码保存为命名的文件mysigmoid2
在您的MATLAB®路径。
使用调整后的SIGMOID内核培训另一个SVM分类器。绘制数据和决策区域,并确定样品外错误分类率。
Mdl2 = fitcsvm (X, Y,“KernelFunction”那“mysigmoid2”那'标准化',真正的);[〜,scores2] =预测(MDL2,XGRID);图;h(1:2)= g箭偶(x(:,1),x(:,2),y);抓住在h(3) =情节(X (Mdl2.IsSu金宝apppportVector, 1),...X (Mdl2.I金宝appsSupportVector, 2),“柯”那“MarkerSize”,10);标题(“带有决策边界的散点图”)轮廓(x1grid,x2grid,重塑(scores2(:,2),size(x1grid)),[0 0],'K');传奇({' 1 '那'1'那'金宝app支持vectors'},“位置”那'最好的事物');抓住从CVMdl2 = crossval (Mdl2);misclass2 = kfoldLoss (CVMdl2);misclass2
misclass2 = 0.0450
在琴状斜坡调整之后,新决策边界似乎提供更好的样本合适,交叉验证率合约超过66%。
这个例子展示了如何优化SVM分类使用fitcsvm.
功能和OptimizeHyperparameters
名称-值对。分类工作在一个高斯混合模型的点的位置。在统计学习的要素, Hastie, Tibshirani, and Friedman(2009),第17页描述了这个模型。该模型首先为“绿色”类生成10个基点,分布为均值(1,0)和单位方差的2-D独立正态分布。它还为“红色”类生成10个基点,分布为均值(0,1)和单位方差的2-D独立正态分布。对于每个职业(绿色和红色),生成100个随机点数如下:
选择一个基点m随机均匀地均匀。
生成一个独立的随机点,具有2-D正常分布,平均值m方差I/5,其中I是2 × 2单位矩阵。在本例中,使用方差I/50来更清楚地显示优化的优势。
生成点和分类器
为每个类生成10个基点。
rng默认的重复性的%grnpop = mvnrnd((1,0)、眼睛(2),10);redpop = mvnrnd([0, 1],眼(2),10);
查看基点。
情节(grnpop (: 1) grnpop (:, 2),'走')举行在情节(redpop (: 1) redpop (:, 2),'ro')举行从
由于一些红色的基准点与绿色的基准点很接近,单凭位置很难对数据点进行分类。
生成每个类的100个数据点。
Redpts = 0 (100,2);为了i = 1:10 0 grnpts(我:)= mvnrnd (grnpop(兰迪(10):)、眼睛(2)* 0.02);redpts(我)= mvnrnd (redpop(兰迪(10):)、眼睛(2)* 0.02);结尾
查看数据点。
图绘制(grnpts (: 1), grnpts (:, 2),'走')举行在情节(redpts (: 1) redpts (:, 2),'ro')举行从
准备分类数据
将数据放入一个矩阵,并生成一个向量GRP.
标签每个点的类。
cdata = [grnpts; redpts];grp = 1 (200 1);%绿色标签1,红色标签-1GRP(101:200)= -1;
准备交叉验证
为交叉验证设置分区。此步骤修复优化在每个步骤中使用的列车和测试集。
c = cvpartition(200,'kfold',10);
优化适合
为了找到一个良好的契合,意思是一个具有低交叉验证丢失的一个,设置贝叶斯优化的选项。使用相同的交叉验证分区C
在所有的优化。
为了再现性,请使用'预期改善加'
采集功能。
opts = struct(“优化”那'Bayesopt'那“ShowPlots”,真的,'cvpartition'c...'获取功能名称'那'预期改善加');svmmod = fitcsvm(cdata,grp,“KernelFunction”那“rbf”那...'OptimizeHyperParameters'那'汽车'那“HyperparameterOptimizationOptions”选择)
|=====================================================================================================| | Iter | Eval客观客观| | | BestSoFar | BestSoFar | BoxConstraint | KernelScale | | |结果| | |运行时(观察)| (estim) | | ||=====================================================================================================| | 最好1 | | 0.345 | 0.24139 | 0.345 | 0.345 | 0.00474 | 306.44 | | 2 |最好| 0.115 | 0.16228 | 0.115 | 0.12678 | 430.31 | 1.4864 | | 3 |接受| 0.52 | 0.13937 | 0.115 | 0.1152 | 0.028415 | 0.014369 | | 4 |接受| 0.61 | 0.2731 | 0.115 |0.11504 | 133.94 | 0.0031427 | | 5 |接受| 0.34 | 0.35782 | 0.115 | 0.11504 | 0.010993 | 5.7742 | | 6 |最好| 0.085 | 0.12094 | 0.085 | 0.085039 | 885.63 | 0.68403 | | | 7日接受| 0.105 | 0.11976 | 0.085 | 0.085428 | 0.3057 | 0.58118 | | 8 |接受| 0.21 | 0.13908 | 0.085 | 0.09566 | 0.16044 | 0.91824 | | | 9日接受| 0.085 | 0.18319 | 0.08510 | 0.08725 | 972.19 | 0.46259 | | |接受| 0.1 | 0.27818 | 0.085 | 0.090952 | 990.29 | 0.491 | |最好11 | | 0.08 | 0.11533 | 0.08 | 0.079362 | 2.5195 | 0.291 | | | 12日接受| 0.09 | 0.12483 | 0.08 | 0.08402 | 14.338 | 0.44386 | | | 13日接受| 0.1 | 0.12396 | 0.08 | 0.08508 | 0.0022577 | 0.23803 | | | 14日接受| 0.11 | 0.11322 | 0.08 |最好15 | 0.087378 | 0.2115 | 0.32109 | | | 0.07 | 0.15379 | 0.07 | 0.081507 | 910.2 | 0.25218 | | 16最好| | 0.065 | 0.17069 | 0.065 | 0.072457 | 953.22 | 0.26253 | | | 17日接受| 0.075 | 0.28338 | 0.065 | 0.072554 | 998.74 | 0.23087 | | | 18日接受| 0.295 | 0.12518 | 0.065 | 0.072647 | 996.18 | 44.626 | | | 19日接受| 0.07 | 0.14373 | 0.065 |0.0.6946 | 985.37 | 0.27389 | | 20 | Accept | 0.165 | 0.14863 | 0.065 | 0.071622 | 0.065103 | 0.13679 | |=====================================================================================================| | Iter | Eval | Objective | Objective | BestSoFar | BestSoFar | BoxConstraint| KernelScale | | | result | | runtime | (observed) | (estim.) | | | |=====================================================================================================| | 21 | Accept | 0.345 | 0.13785 | 0.065 | 0.071764 | 971.7 | 999.01 | | 22 | Accept | 0.61 | 0.1561 | 0.065 | 0.071967 | 0.0010168 | 0.0010005 | | 23 | Accept | 0.345 | 0.12046 | 0.065 | 0.071959 | 0.0010674 | 999.18 | | 24 | Accept | 0.35 | 0.11488 | 0.065 | 0.071863 | 0.0010003 | 40.628 | | 25 | Accept | 0.24 | 0.26111 | 0.065 | 0.072124 | 996.55 | 10.423 | | 26 | Accept | 0.61 | 0.19622 | 0.065 | 0.072068 | 958.64 | 0.0010026 | | 27 | Accept | 0.47 | 0.14015 | 0.065 | 0.07218 | 993.69 | 0.029723 | | 28 | Accept | 0.3 | 0.12165 | 0.065 | 0.072291 | 993.15 | 170.01 | | 29 | Accept | 0.16 | 0.27222 | 0.065 | 0.072104 | 992.81 | 3.8594 | | 30 | Accept | 0.365 | 0.12858 | 0.065 | 0.072112 | 0.0010017 | 0.044287 |
__________________________________________________________ 优化完成。maxobjective达到30个。总函数计算:30总运行时间:52.3583秒总目标函数计算时间:5.1671最佳观测可行点:BoxConstraint KernelScale _____________ ___________ 953.22 0.26253观测目标函数值= 0.065估计目标函数值= 0.073726函数评估时间= 0.17069最佳估计可行点(根据模型):BoxConstraint KernelScale _____________ ___________ 985.37 0.27389估计的目标函数值= 0.072112估计的函数计算时间= 0.17908
svmmod = ClassificationSVM ResponseName:‘Y’CategoricalPredictors:[]类名:[1]ScoreTransform:“没有一个”NumObservations: 200 HyperparameterOptimizationResults: [1 x1 BayesianOptimization]α:[77 x1双]偏见:-0.2352 KernelParameters: [1 x1 struct] BoxConstraints: x1双[200]ConvergenceInfo: [1 x1 struct] IsSupportVector:金宝app[200x1 logical] Solver: 'SMO'属性,方法
找出优化模型的损失。
损失new = kfoldloss(fitcsvm(cdata,grp,'cvpartition'c“KernelFunction”那“rbf”那...“BoxConstraint”,svmmod.HyperParameterOptimationResults.xatminobjective.boxConstraint,...'kernelscale', svmmod.HyperparameterOptimizationResults.XAtMinObjective.KernelScale))
损失= 0.0650.
这种损失与“观察目标函数值”下的优化输出中报告的损失相同。
可视化优化的分类器。
d = 0.02;[x1Grid, x2Grid] = meshgrid (min (cdata (: 1)): d:马克斯(cdata (: 1)),...min(cdata(:,2)):d:max(cdata(:,2)));xGrid = [x1Grid (:), x2Grid (:));[〜,得分] =预测(SVMMOD,XGRID);图;h = nan(3,1);%preallocation.h(1:2)= g箭偶(CDATA(:,1),CDATA(:,2),GRP,'rg'那' + *’);抓住在h(3) =情节(cdata (svmmod.IsSu金宝apppportVector, 1),...cdata(svmmod.is金宝appsupportvector,2),“柯”);轮廓(x1grid,x2grid,重塑(分数(:,2),尺寸(x1grid)),[0 0],'K');传奇(H,{' 1 '那“+ 1”那'金宝app支持vectors'},“位置”那'东南');轴平等的抓住从
此示例显示如何在观察网格上预测SVM模型的后验概率,然后在网格上绘制后部概率。绘制后验概率暴露了决策边界。
载入费雪的虹膜数据集。使用花瓣的长度和宽度训练分类器,并从数据中去除弗吉尼亚的物种。
加载fisheriris类保留=〜strcmp(物种,'virginica');X =量(classKeep 3:4);y =物种(classKeep);
使用数据列车SVM分类器。指定类的顺序是良好的做法。
svmmodel = fitcsvm(x,y,'classnames', {'setosa'那“多色的”});
估计最佳分数转换功能。
RNG(1);重复性的%[SvmModel,记分参数] = FitPosterior(SVMModel);
警告:课程完美分开。最佳分数到后部转换是阶梯功能。
ScoreParameters
ScoreParameters =结构体字段:类型:'step' LowerBound: -0.8431 UpperBound: 0.6897 PositiveClassProbability: 0.5000
最佳分数转换函数是阶梯函数,因为类是可分离的。田野下界
和上行
的ScoreParameters
表示与分离超平面内(边缘)内的观测相对应的分数间隔的下端和上端点。没有培训观察落在边际内。如果新分数处于间隔,则软件分配相应的观察结果正类后概率,即PositiveClassProbability
领域的ScoreParameters
.
在观察到的预测器空间中定义一个值的网格。预测网格中每个实例的后验概率。
xMax = max (X);xMin = min (X);d = 0.01;[x1Grid, x2Grid] = meshgrid (xMin (1): d: xMax (1) xMin (2): d: xMax (2));[~, PosteriorRegion] =预测(SVMModel [x1Grid (:), x2Grid (:)));
绘制正类后验概率区域和训练数据。
图;contourf(x1grid,x2grid,...重塑(PosteriorRegion(:, 2),大小(x1Grid, 1),大小(x1Grid, 2)));h = colorbar;h.Label.String ='p({\它{versicolor}})';h.YLabel.FontSize = 16;caxis ([0 1]);colormap喷射;抓住在G箭头(x(:,1),x(:,2),y,'MC'那“方式”10],[15日);sv = X (SVMModel.I金宝appsSupportVector:);情节(sv (: 1), sv (:, 2),“哟”那“MarkerSize”15岁的“线宽”,2);轴紧的抓住从
在两班学习中,如果类别是可分离的,那么有三个地区:观察结果具有正类后概率0.
一个在那里1
而另一个是正类的前几个概率。
这个例子展示了如何通过训练一个由线性支持向量机二进制学习器组成的纠错输出码(ECOC)模型来确定一个形状占用图像的哪个象限。这个示例还演示了存储支持向量、它们的标签和估计值的ECOC模型的磁盘空间消耗金宝app 系数。
创建数据集
在50×50图像中随机将圆圈与半径五个放置在一起。制作5000个图像。为每个图像创建一个标签,指示圆圈占用的象限。象限1位于右上角,象限2位于左上角,象限3位于左下角3,象限4位于右下方。预测器是每个像素的强度。
d = 50;以像素为单位的图像的%高度和宽度n = 5 e4;%样本大小x =零(n,d ^ 2);%预测测量矩阵预释Y = 0 (n, 1);%标签preallocation.Theta = 0:(1 / D):( 2 * Pi);r = 5;%圆半径RNG(1);重复性的%为了j = 1:n fimmat =零(d);%空镜像C =数据征((r + 1):( d - r - 1),2);%随机圆心x = r * cos(θ)+ c(1);%制作圆圈Y = r*sin + c(2);= sub2ind([d d],round(y),round(x));%转换为线性索引figmat (idx) = 1;%绘制圆圈x(j,:) = fimmat(:);%存储数据Y (j) = (c(2) > =地板(d / 2) + 2 * (c(2) <地板(d / 2)) +...(c(1)<楼层(d / 2))+...2 *((c(1)> =楼层(d / 2))&(c(2)<楼层(d / 2)));确定象限结尾
情节一个观察。
图imagesc(figmat) h = gca;H.YDIR =.'普通的';标题(sprintf ('Quadrant%d',y(结束))))
培训ECOC模式
使用25%的抵抗样本,并指定训练和抵抗样本指数。
p = 0.25;本量利= cvpartition (Y,“坚持”, p);%交叉验证数据分区Isidx =培训(CVP);%训练样本指标OOSIDX =测试(CVP);%测试样品指标
创建一个SVM模板,指定存储二进制学习者的支持向量。金宝app将其传递给培训数据fitcecoc
训练模型。确定培训样本分类错误。
t = templatesvm('save金宝appsupportVectors',真正的);mdlsv = fitcecoc(x(isidx,:),y(isidx),'学习者',t);Isloss = Resubloss(MDLSV)
isloss = 0.
mdlsv.
是一个培训Classifiedecoc.
多标配模型。它存储每个二进制学习者的训练数据和支持向量。金宝app对于大数据集,例如图像分析中的大数据集,模型可以消耗大量内存。
确定ECOC模型所消耗的磁盘空间量。
Infomdlsv = whos('mdlsv');mbMdlSV = infoMdlSV.bytes / 1.049 e6
mbMdlSV = 763.6150
该模型消耗763.6 MB。
提高模型效率
你可以评估样本外的表现。您还可以评估模型是否与不包含支持向量、相关参数和训练数据的压缩模型进行过拟合。金宝app
丢弃训练后ECOC模型中金宝app的支持向量和相关参数。然后,通过使用,从生成的模型中丢弃训练数据袖珍的
.
mdl = discard金宝appsupportvectors(mdlsv);cmdl = compact(mdl);信息= whos('mdl'那“CMdl”);[bytesCMdl, bytesMdl] = info.bytes;/infoMdlSV.bytes . memReduction = 1 - [bytesMdl bytesCMdl]/infoMdlSV.bytes . memReduction = 1 - [bytesMdl bytesCMdl
擒矩=1×20.0626 0.9996
在这种情况下,丢弃支持向量可以减少约6%的内存消耗。金宝app压缩和丢弃支持向量可以减少大约99.96%的大小。金宝app
管理支持向量的替代方法是通过指定较大的盒子约束来减少它们的金宝app数字,例如100.使用更少的支持向量的SVM模型更为希望并且消耗较少的内存,增加了盒子约束的值趋于增加培训时间。
删除mdlsv.
和Mdl
从工作区。
清除Mdlmdlsv.
评估样品的表现
计算holdout样本的分类误差。绘制拒不让步样本预测的样本图。
oosLoss =损失(CMdl X (oosIdx:), Y (oosIdx))
oosLoss = 0
yhat =预测(cmdl,x(oosidx,:));nvec = 1:尺寸(x,1);OOSIDX = NVEC(OOSIDX);图;为了j = 1:9子图(3,3,j)映射(reshape(x(x(oosidx(j),:)),[d d])h = gca;H.YDIR =.'普通的';标题(sprintf (“象限:% d 'yHat (j)))结尾文本(-1.33 * d, 4.5 * d + 1,'预测'那'字体大小', 17)
该模型不会对任何顽固样本观测值进行错误分类。
Hastie, T., R. Tibshirani, J. Friedman。统计学习的要素,第二版。纽约:施普林格,2008。
克里斯蒂安尼尼,N.肖-泰勒。支持向量机和基于内核的学习方法的介绍金宝app.剑桥,英国:剑桥大学出版社,2000年出版社。
[3]球迷,R.-E。,林志信。陈,C.-J。林。使用二阶信息进行训练支持向量机的工作集选择金宝app机床学习研究,Vol 6,2005,pp.1889-1918。
凯克曼V., T. -M。和M. Vogt。从大数据集训练核机的迭代单数据算法:理论与性能在金宝app支持向量机:理论和应用.王力波主编,255-274。柏林:斯普林格出版社,2005年版。