当数据正好有两个类时,可以使金宝app用支持向量机(SVM)。支持向量机通过寻找最好的超平面将一类数据点从另一类数据点中分离出来来分类数据。的最好的支持向量机的超平面是指具有最大保证金在两个班之间。边际是指平行于没有内部数据点的超平面的板的最大宽度。
的金宝app支持向量是离分离超平面最近的数据点;这些点都在板的边界上。下图说明了这些定义,+表示类型1的数据点,-表示类型- 1的数据点。
数学公式:原始。这个讨论是在Hastie、Tibshirani和Friedman之后进行的[1]还有克里斯琴尼尼和肖-泰勒[2].
用于训练的数据是一组点(向量)xj以及它们的分类yj.对于一些维度d, 这xj∊Rd,yj=±1.超平面的方程是
在哪里β∊Rd和b是一个实数。
以下问题定义了最好的分离超平面(即决策边界)。找到β和b这最小化| |β||使所有数据点(xj,yj),
支持向量金宝app是xj在边界上,那些
为了数学上的方便,这个问题通常用最小化的等价问题给出 .这是一个二次编程问题。最佳解决方案 启用向量分类z如下:
是分类分表示距离z来自决策边界。
数学公式:双。对偶二次规划问题的求解在计算上比较简单。为了得到对偶,取正的拉格朗日乘数α.j乘以每个约束条件,从目标函数中减去:
在哪里找一个静止点lP在β和b.设置渐变lP到0,你得到
(1) |
代入lP,你得到了双重lD:
你将其最大化α.j≥0.在一般情况下,许多α.j最大值为0。非零的α.j在对偶问题的解中定义超平面,如方程1,即β作为α.jyjxj.数据点xj对应于零α.j是金宝app支持向量.
的衍生物lD对于一个非零的α.j最优值是0。这给了
特别地,它给出的值是b通过取任意的解j与非零α.j.
双是一个标准的二次规划问题。例如,优化工具箱™Quadprog.
(优化工具箱)Solver解决这类问题。
您的数据可能不允许一个分离的超平面。在这种情况下,SVM可以使用软边缘,这意味着一个分离了许多但不是所有数据点的超平面。
软边距有两种标准公式。两者都需要添加松弛变量ξj还有一个惩罚参数C.
的l1规范的问题是:
以致
的l1-norm指使用ξj作为松弛变量而不是它们的平方。三个解算器选项SMO
,ISDA
,L1QP
的fitcsvm
最小化l1规范的问题。
的l2规范的问题是:
受同样的约束。
在这些公式中,你可以看到这种增长C将更多的权重放在松弛变量上ξj,这意味着优化尝试在类之间进行更严格的分离。等价地,减少C接近0使得错误分类不那么重要。
数学公式:双。为了更简单的计算,考虑l1这种软边际公式存在双重问题。使用拉格朗日乘数法μ.j的最小值函数l1规范的问题是:
在哪里找一个静止点lP在β,b和正ξj.设置渐变lP到0,你得到
这些方程直接导致对偶公式:
受约束
最后一组不等式,0≤α.j≤C,说明了为什么C有时被称为箱约束.C保持拉格朗日乘数的允许值α.j在一个“盒子”中,一个有界区域。
梯度方程b给出了解决方案b就这组非零而言α.j,对应于支持向量。金宝app
你可以写出并解出它的对偶l2-范数问题。详情请参见克里斯蒂安尼尼和肖-泰勒[2]第六章。
fitcsvm
实现。两个软边界问题都是二次规划问题。在内部,fitcsvm
有几种不同的算法来解决这个问题。
对于一个类或二元分类,如果您没有在数据中设置预期离群值的一部分(参见OutlierFraction
),默认求解器是顺序最小优化(SMO)。SMO通过一系列两点最小化最小化一个规范问题。在优化期间,SMO尊重线性约束
并明确地包括模型中的偏置术语。SMO相对较快。有关SMO的更多详细信息,请参阅[3].
对于二进制分类,如果您在数据中设置了预期离群值的一部分,那么默认解算器是迭代单数据算法。与SMO一样,ISDA解决了单一规范的问题。与SMO不同,ISDA通过一系列单点最小化来实现最小化,不考虑线性约束,也不明确地在模型中包含偏差项。有关ISDA的详细信息,请参见[4].
对于一类或两类分类,如果你有一个优化工具箱许可,您可以选择使用Quadprog.
(优化工具箱)解决单一标准的问题。Quadprog.
使用大量的内存,但解决二次程序的高度精度。有关详细信息,请参见二次规划的定义(优化工具箱).
一些二元分类问题没有一个简单的超平面作为有用的分离标准。对于这些问题,有一种数学方法的变体,它几乎保留了支持向量机分离超平面的所有简单性。
这种方法使用了这些来自复制内核理论的结果:
有一类函数G(x1,x2),使用以下属性。有一个线性空间年代和一个函数φ.映射x来年代以致
G(x1,x2) = <φ.(x1),φ.(x2)>。
点积发生在空间中年代.
这类函数包括:
多项式:对于某个正整数p,
G(x1,x2)=(1 +x1”x2)p.
径向基函数(高斯):
G(x1,x2) = exp(∥x1- - - - - -x2)∥2).
多层感知器或乙状体(神经网络):对于一个正数p1和一个负数p2,
G(x1,x2) =双曲正切(p1x1”x2+p2).
请注意
不是每一套p1和p2生成一个有效的重新生成内核。
fitcsvm
不支持sigmoi金宝appd内核。相反,您可以通过使用'骨箱'
名称值对参数。有关详细信息,请参阅使用自定义核训练SVM分类器.
使用内核的数学方法依赖于超平面的计算方法。所有的计算为超平面分类使用不外乎点产品。下载188bet金宝搏因此,非线性内核可以使用相同的计算和求解算法,并获得是非线性分类器。得到的分类是在一些空间超曲面年代,但空间年代不需要被识别或检查。
与任何有监督学习模型一样,您首先训练一个支持向量机,然后交叉验证分类器。金宝app使用经过训练的机器对新数据进行分类(预测)。此外,为了获得满意的预测精度,可以使用各种SVM核函数,并且必须对核函数的参数进行调优。
使用SVM分类器训练并可选地交叉验证fitcsvm
.最常见的语法是:
SVMModel = fitcsvm (X, Y,‘KernelFunction’,‘rbf’,……“标准化”,的确,“类名”,{‘negClass’,‘posClass});
输入:
X
- 预测数据,其中每行是一个观察,和每一列的矩阵是一个预测值。
Y
—类标签的数组,每行对应于in中相应行的值X
.Y
可以是类别、字符或字符串数组、逻辑或数字向量,或字符向量的单元格数组。
KernelFunction
—默认值为“线性”
对于两类学习,将数据与超平面分开。价值“高斯”
(或者'RBF'
)是单类学习的默认值,并指定使用高斯核函数(或径向基函数)。选择合适的核函数是训练SVM分类器的重要步骤。
标准化
-表示软件在训练分类器之前是否应该标准化预测器的标志。
一会
—区分负类和正类,或指定数据中包含哪些类。负类是第一个元素(或字符数组的行),例如:“negClass”
,正类是第二个元素(或字符数组的行),例如。,'posclass'
.一会
必须是相同的数据类型Y
.指定类名是一种很好的实践,特别是在比较不同分类器的性能时。
由此产生的培训模型(SVMModel
)包含SVM算法的优化参数,使您能够对新数据进行分类。
有关可用于控制训练的更多名称-值对,请参阅fitcsvm
参考页面。
使用新数据进行分类预测
.使用训练有素的SVM分类器对新数据进行分类的语法(SVMModel
)是:
(标签,分数)=预测(SVMModel newX);
由此产生的向量,标签
,表示每行的分类X
.分数
是一个n-软分数的by-2矩阵。每行对应于X
这是一个新的观察结果。第一列包含被分类为负类的观察的分数,第二列包含被分类为正类的观察的分数。
要估计后验概率而不是分数,首先通过训练的SVM分类器(SVMModel
) 到fitPosterior
,它适合分数的分数到后概率转换函数。语法是:
ScoreSVMModel = fitPosterior (SVMModel, X, Y);
酒店ScoreTransform
的分类器scorsvmmodel.
包含最优变换函数。通过scorsvmmodel.
来预测
.而不是返回分数,输出参数分数
包含一个被分类为负的观察的后验概率(列1)分数
)或正数(第2列分数
) 班级。
使用“OptimizeHyperparameters”
的名称-值对参数fitcsvm
查找最小化交叉验证损失的参数值。符合条件的参数是“BoxConstraint”
,'骨箱'
,“内核尺度”
,“PolynomialOrder”
,'标准化'
.对于一个示例,请参见优化分类适合使用贝叶斯优化.或者,您可以使用bayesopt
函数,如使用bayesopt优化交叉验证分类器.的bayesopt
功能允许更灵活的自定义优化。你可以使用bayesopt
函数可优化任何参数,包括使用fitcsvm
函数。
你也可以尝试根据这个方案手动调优分类器的参数:
将数据传递给fitcsvm
,并设置名称-值对参数'kernelscale','auto'
.假设调用训练过的SVM模型SVMModel
.该软件使用启发式过程来选择内核比例。启发式程序使用子采样。因此,要重现结果,请使用随机数种子RNG.
之前训练分类。
通过将其传递给Cross验证分类器crossval
.默认情况下,该软件进行10倍交叉验证。
通过交叉验证的支持向量机模型kfoldLoss
估计并保留分类误差。
重新训练SVM分类器,但调整“内核尺度”
和“BoxConstraint”
名称值对参数。
BoxConstraint
- 一个策略是尝试框约束参数的几何序列。例如,占用11个值,来自1 e-5
来1 e5
倍数10.增加BoxConstraint
可能会减少支持向量的数量,但也可能会增加训练时间。金宝app
KernelScale
- 一个策略是试图在原有内核规模缩放RBF西格玛参数的等比数列。通过这样做:
检索原始内核规模,例如:ks
,使用点表示法:ks = SVMModel.KernelParameters.Scale
.
作为原内核的新尺度因子。例如,乘ks
通过11个值1 e-5
来1 e5
通过10倍增加。
选择产生最低分类错误的模型。您可能希望进一步细化参数以获得更好的精度。从初始参数开始,执行另一个交叉验证步骤,这次使用系数1.2。
此示例显示如何使用高斯内核功能生成非线性分类器。首先,在两个维度中生成一类单元盘中的一类点,并且从半径1到半径2中的环形中的另一类点。然后,基于具有高斯径向基函数内核的数据生成分类器。默认的线性分类器显然不适合此问题,因为模型是圆对称的。将框约束参数设置为正
要进行严格的分类,即没有分类错误的训练点。其他内核函数可能无法使用这个严格的框约束,因为它们可能无法提供严格的分类。尽管rbf分类器可以分离类,但结果可能训练过度。
生成均匀分布在单位磁盘上的100个点。为此,生成一个半径r作为均匀随机变量的平方根,生成一个角度t统一在(0, ),并放在(rcos (t),rsin (t))。
rng (1);再现性的百分比r =√兰特(100 1));%半径t = 2 *π*兰德(100 1);% 角度Data1 = [r.*cos(t), r.*sin(t)];%点
生成100个均匀分布在环空中的点。半径还是与平方根成比例,这次是均匀分布的平方根,从1到4。
r2 =√3 *兰德(100 1)+ 1);%半径t2 = 2 *π*兰德(100 1);% 角度Data2 = [r2.*cos(t2), r2.*sin(t2)];%点
绘制这些点,并绘制半径为1和2的圆以作比较。
图形绘图(数据1(:,1),数据1(:,2),“r”。,“MarkerSize”, 15)在情节(DATA2(:,1),数据2(:,2),“b”。,“MarkerSize”15) ezpolar (@ (x) 1); ezpolar (@ (x) 2);轴相同的持有从
放入一个矩阵中的数据,并进行分类的向量。
data3 = [data1; data2);theclass = 1 (200 1);theclass (1:10 0) = 1;
用遗传算法训练支持向量机分类器KernelFunction
设置为'RBF'
和BoxConstraint
设置为正
.绘制决策边界并标记支持向量。金宝app
%训练支持向量机分类器成立这个,课程cl = fitcsvm (data3,'骨箱','RBF',...“BoxConstraint”正,“类名”,[ - 1,1]);在网格上预测分数d = 0.02;[x1Grid, x2Grid] = meshgrid (min (data3 (: 1)): d:马克斯(data3 (: 1)),...分钟(DATA3(:,2)):d:最大(DATA3(:,2)));xGrid = [x1Grid (:), x2Grid (:));[〜,分数] =预测(CL,XGRID);%绘制数据和决策边界图;h (1:2) = gscatter (data3 (: 1), data3 (:, 2), theclass,rb的,“。”);持有在ezpolar (@ (x) 1);h(3) =情节(data3 (cl.IsSu金宝apppportVector, 1), data3 (cl.IsSupportVector, 2),'KO');轮廓(x1Grid x2Grid,重塑(分数(:,2),大小(x1Grid)), [0 0),“k”);图例(H,{'-1',“+ 1”,“金宝app支持向量”}); 轴相同的持有从
fitcsvm
产生的分类器的靠近半径1的圆的差异是由于随机训练数据。
使用默认参数进行训练会产生一个更接近圆形的分类边界,但它会对一些训练数据进行错误分类。的默认值BoxConstraint
是1
,因此有更多的支持向量。金宝app
成立这个,课程cl2 = fitcsvm (data3,'骨箱','RBF');[~, scores2] =预测(这有点难度,xGrid);图;h (1:2) = gscatter (data3 (: 1), data3 (:, 2), theclass,rb的,“。”);持有在ezpolar (@ (x) 1);h(3) =情节(data3 (cl2.IsSu金宝apppportVector, 1), data3 (cl2.IsSupportVector, 2),'KO');轮廓(x1Grid,x2Grid,重塑(scores2(:,2),尺寸(x1Grid)),[0 0],“k”);图例(H,{'-1',“+ 1”,“金宝app支持向量”}); 轴相同的持有从
这个例子展示了如何使用自定义核函数,如sigmoid核,来训练SVM分类器,并调整自定义核函数参数。
产生单位圆内的随机点的集合。在第一和第三象限为属于正类,和那些在第二和第四象限中的负类标注点。
rng (1);再现性的百分比n = 100;%每象限的点数r1 =√兰特(2 * n, 1));%随机半径t1 =[π/ 2 *兰德(n, 1);(π/ 2 *兰德(n - 1) +π)];% 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 = y =(4 * n,1);Y(2 * n + 1:end)= -1;%的标签
图数据。
图;gscatter (X (: 1) X (:, 2), Y);标题(“模拟数据散点图”)
编写一个函数,接受特征空间中的两个矩阵作为输入,并使用s形核将它们转换为Gram矩阵。
功能G = mysigmoid (U, V)斜率伽马和拦截C的%Sigmoid内核功能γ= 1;c = 1;n = U*V' + c;结尾
将此代码保存为命名的文件mysigmoid
在您的MATLAB®路径。
使用s形核函数训练SVM分类器。将数据标准化是一个很好的做法。
Mdl1 = fitcsvm (X, Y,'骨箱','mysigmoid','标准化',真正的);
Mdl1
是一个分类VM.
包含估计参数的分类器。
绘制数据,并确定支持向量和决策边界。金宝app
%在网格上计算分数d = 0.02;%网格的步长[x1Grid, x2Grid] = meshgrid (min (X (: 1)): d:马克斯(X (: 1))...min (X (:, 2)): d:马克斯(X (:, 2)));xGrid = [x1Grid (:), x2Grid (:));%的网格[〜,scors1] =预测(MDL1,XGRID);%的分数图;h (1:2) = gscatter (X (: 1), (:, 2), Y);持有在h(3) =情节(X (Mdl1.IsSu金宝apppportVector, 1),...x(mdl1.is金宝appsupportVector,2),'KO',“MarkerSize”10);%支金宝app持向量轮廓(x1Grid x2Grid,重塑(scores1(:, 2),大小(x1Grid)), [0 0),“k”);%的决策边界标题(“散点图与决策边界”)({传奇'-1',' 1 ',“金宝app支持向量”},“位置”,“最佳”);持有从
您可以尝试提高决策边界的形状调整内核参数。这也可能降低样本内错误率,但是,你应该首先确定出样品的-的误判率。
采用10倍交叉验证确定样本外误分类率。
CVMdl1=交叉值(Mdl1);错误分类1=kfoldLoss(CVMdl1);错误分类1
misclass1 = 0.1350
样本外误分类率为13.5%。
写另一个s型函数,但是Setγ= 0.5;
.
功能G = mysigmoid2 (U, V)斜率伽马和拦截C的%Sigmoid内核功能γ= 0.5;c = 1;n = U*V' + c;结尾
将此代码保存为命名的文件mysigmoid2
在您的MATLAB®路径。
使用调整后的s形核训练另一个SVM分类器。绘制数据和决策区域,确定样本外误分类率。
Mdl2 = fitcsvm (X, Y,'骨箱','mysigmoid2','标准化',真正的);[~, scores2] =预测(Mdl2 xGrid);图;h (1:2) = gscatter (X (: 1), (:, 2), Y);持有在h(3) =情节(X (Mdl2.IsSu金宝apppportVector, 1),...X (Mdl2.I金宝appsSupportVector, 2),'KO',“MarkerSize”10);标题(“散点图与决策边界”)轮廓(x1grid,x2grid,重塑(scores2(:,2),尺寸(x1grid)),[0 0],“k”);传奇({'-1',' 1 ',“金宝app支持向量”},“位置”,“最佳”);持有从CVMdl2 = crossval (Mdl2);misclass2 = kfoldLoss (CVMdl2);misclass2
misclass2 = 0.0450
在sigmoid斜率调整后,新的决策边界似乎提供了更好的样本内拟合,交叉验证率收缩了66%以上。
这个例子展示了如何使用优化的SVM分类fitcsvm
函数和OptimizeHyperparameters
名称值参数。
生成数据
分类工作在一个高斯混合模型的点的位置。在统计学习的要素, Hastie, Tibshirani, and Friedman(2009),第17页描述了这个模型。该模型首先为“绿色”类生成10个基点,分布为均值(1,0)和单位方差的2-D独立正态分布。它还为“红色”类生成10个基点,分布为均值(0,1)和单位方差的2-D独立正态分布。对于每个职业(绿色和红色),生成100个随机点数如下:
选择一个基点米随机均匀地均匀。
生成一个具有二维正态分布均值的独立随机点米方差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);grnpts = redpts;为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
标记每个点的类别。1表示绿色类,-1表示红色类。
cdata = [grnpts; redpts];grp = 1 (200 1);grp (101:200) = 1;
准备交叉验证
为交叉验证设置分区。
c = cvpartition (200“KFold”10);
此步骤为可选步骤。如果为优化指定一个分区,则可以为返回的模型计算实际的交叉验证损失。
优化匹配
为了找到一个很好的匹配,即具有最优超参数的匹配,以最小化交叉验证损失,可以使用贝叶斯优化。属性指定要优化的超参数列表OptimizeHyperparameters
参数,并通过使用HyperparameterOptimizationOptions
名称值参数。
具体说明“OptimizeHyperparameters”
作为“汽车”
.的“汽车”
选项包括一组要优化的典型超参数。fitcsvm
的最优值BoxConstraint
和KernelScale
.设置超参数优化选项以使用交叉验证分区c
选择'预期改善 - 加'
再现性的获取功能。默认的获取函数取决于运行时,因此可以给出不同的结果。
opts=struct(“CVPartition”,C,“AcquisitionFunctionName”,'预期改善 - 加');Mdl = fitcsvm (grp cdata,'骨箱','RBF',...“OptimizeHyperparameters”,“汽车”,“HyperparameterOptimizationOptions”选择)
|==================================================================================================================================================================Iter |评估|目标|目标| Sofar | Sofar | Boxelscale | |结果|第1244号||||||||||||||||||124|124|124月月第四列列列列第第第7 7 7 7=======================================================================================================================================================================================================================================================================================第第第第第第第第第第第第==========================================================================================0.115 | 0.18714 | 0.115 | 0.12678 | 430.31 | 1.4864 | 3 |接受| 0.52 | 0.27751 | 0.1152 | 0.028415 | 0.014369 |接受| 0.61 1247 |0.1 0.15 0 0.115周四周四0.115 0 0.115 0 0 0.1150 0 0.115 0 0 0.115 0 0 0.115 0 0.115 0.0 0 0.115 0 0.115 0 0.0 0 0 0.1150 0 0 0 0.1150 0 0 0 0.1150 0 0 0.1150 0 0 0.1150 0 0 0 0.周四周四周四周四周四周四周四0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.085428 | 0.3057 | 0.58118 | 8 |接受| 0.21 | 0.26477 | 0.085 | 0.09566 | 0.16044 | 0.91824 | 9 |接受| 0.085 | 0.23688|0.0 0.085 0.0 0 0.0 0 0.085 0.0 0 0.085 0.0 0 0.085 0.0 0 0.0 0 0.0 0 0.085 0.0 0 0 0 0.085 0.0 0 0 0 0.085 0 0.085 0 0 0 0.085 5 0.085 5 0.085 5 5 5 0 0 0.085 5 5 0 0 0 0 0 0.085 5 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 5 5 5 5 5\12451245\12455 5 5 0 0 0 0 0 0.085 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.08402 | 14.338 | 0.44386 | 13 |接受| 0.1 | 0.20009 | 0.08 | 0.08508 | 0.0022577 12403 | 14 |接受| 0.11 | 0.49489 1240.08|0.087378 0.087378 0 0.087378 0 0.087378 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.787 7 7 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 7 7 7 7 7 7 7 7 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 54 | 998.74 | 0.23087 | 18 |接受| 0.295 | 0.27085 | 0.065 | 0.072647 | 996.18 | 44.626 | 19 |接受| 0.07 | 0.31933 |第0.065 0.065 0.065 0.065 5 0.065 5 0.065 0.060 0.065 0.065 0.065 0.065 0.065 0.065 0.065 0.065 0.065 0.060 0.060.06946 6 0.06946 6 5 5 5 5 5.066.6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 5 5 5 5 5 5 5 0 0 0 0.6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 5 5 5 5 5 5 5 5 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0=========国际热核聚变实验堆(Iter)评估(Eval)目标(Objective)最佳状态(BestSoFar)最佳状态(BestSoFar)BoxConstraint(BoxConstraint)内核尺度(KernelScale)结果(result)运行时(observed)(估计)(124?????????????????124???????????????????????????????????????????????????????????月月月月月第第第============第第第第第第第==================第第第第第第============================================================第第第第第第第第第第第第第第第第第==============================第第第第第第第第第第第第第第第第第=======================================第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第;0.61 | 0.26964 | 0.065 | 0.071967 | 0.0010168 | 0.0010005 | 23 |接受| 0.345 | 0.34764 | 0.065 | 0.071959 | 0.0011459 | 995.89 | 24 |接受1240。40.628 |; 0.244 0 0 0 0.247 7 7 7 0 0.247 7 0 0 0.247 0 0 0 0 0 0 0 0 0.247 0 0 0.247 0 0 0.247 0 0 0.247 7 0 0 0.22 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 0.0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0| 0.20158 | 0.065 | 0.07218 | 993.69 | 0.029723 | 28 |接受| 0.3 | 0.17353 | 0.065 | 0.072291 | 993.15 | 170.01 | 29 |根据pt | 0.16 | 0.41714 | 0.065 | 0.072103 | 992.81 | 3.8594 | 30 |接受| 0.365 | 0.42269 | 0.065 | 0.072112 | 0.0010017 1244287|
__________________________________________________________ 优化完成。maxobjective达到30个。总函数计算:30总运行时间:42.6693秒总目标函数计算时间:9.3728BoxConstraint KernelScale _____________ ___________ 953.22 0.26253观测目标函数值= 0.065估计目标函数值= 0.073726函数评估时间= 0.36104最佳估计可行点(根据模型):BoxConstraint KernelScale _____________ ___________ 985.37 0.27389估计的目标函数值= 0.072112估计的函数计算时间= 0.29981
MDL = ClassificationSVM ResponseName: 'Y' CategoricalPredictors:[]类名:[-1 1] ScoreTransform: '无' NumObservations:200个HyperparameterOptimizationResults:[1x1的BayesianOptimization]阿尔法:[77x1双]偏压:-0.2352 KernelParameters:[1x1的结构] BoxConstraints:[200x1双] ConvergenceInfo:[1x1的结构] IsSupportVecto金宝appr:[200x1逻辑]求解: 'SMO' 的属性,方法
fitcsvm
返回一个分类VM.
使用最佳估计可行点模型对象。最佳估计可行点是一组超参数的该结合基于贝叶斯优化过程的基本高斯过程模型中的交叉验证损失的置信上限最小化。
贝叶斯优化过程内部维护了客观函数的高斯过程模型。目标函数是分类的交叉验证错误分类率。对于每次迭代,优化过程更新高斯进程模型,并使用模型来查找新的HyperParameter集。迭代显示的每一行都显示了新的HyperParametes和这些列值:
客观的
-在新超参数集合处计算的目标函数值。
目标运行时
-目标函数评估时间。
EVAL结果
—结果报告,指定为接受
,最好的
,或错误
.接受
表示目标函数返回一个有限值,并且错误
指示目标函数返回一个非有限实标量的值。最好的
指示目标函数返回一个比先前计算的目标函数值低的有限值。
BestSoFar(观察)
-到目前为止计算的最小目标函数值。该值是当前迭代的目标函数值(如果EVAL结果
当前迭代值是最好的
)或前一个的值最好的
迭代。
BestSoFar (estim)。
-在每次迭代时,软件使用更新的高斯过程模型,对迄今为止尝试过的所有超参数集估计目标函数值的置信上限。然后软件选择上置信界最小的点。的BestSoFar (estim)。
value是由函数返回的目标函数值predictObjective
在最小点处的功能。
迭代显示下面的图显示了BestSoFar(观察)
和BestSoFar (estim)。
值分别为蓝色和绿色。
返回的对象Mdl
使用估计的最佳可行点,即超参数集,产生BestSoFar (estim)。
在最终高斯过程模型的基础上,在最终迭代的值。
你可以获得最好的点HyperparameterOptimizationResults
属性或使用bestPoint
函数。
Mdl.HyperparameterOptimizationResults.XAtMinEstimatedObjective
ans=1×2表BoxConstraint KernelScale _____________ ___________ 985.37 - 0.27389
[X,CriterionValue,迭代] = bestPoint(Mdl.HyperparameterOptimizationResults)
x =1×2表BoxConstraint KernelScale _____________ ___________ 985.37 - 0.27389
标准值=0.0888
迭代= 19
默认情况下bestPoint
功能使用“min-visited-upper-confidence-interval”
标准该准则选择从第19次迭代中获得的超参数作为最佳点。CriterionValue
为最终高斯过程模型计算的交叉验证损失的上界。通过使用分区计算实际的交叉验证损失c
.
L_MinEstimated = kfoldLoss (fitcsvm (grp cdata,“CVPartition”,C,'骨箱','RBF',...“BoxConstraint”x。BoxConstraint,“内核尺度”,x.kernelscale))
L_MinEstimated = 0.0700
实际的交叉验证损失接近于估价值。的估计目标函数值
显示在优化结果图的下面。
您还可以提取观察到的最佳可行点(即最后一个)最好的
从迭代显示器中点击HyperparameterOptimizationResults
属性或通过指定标准
作为“min-observed”
.
mdl.HyperParameterOptimationResults.xatminobjective.
ans=1×2表BoxConstraint KernelScale _____________ ___________ 953.22 - 0.26253
[x_observed, CriterionValue_observed iteration_observed] = bestPoint (Mdl。HyperparameterOptimizationResults,“标准”,“min-observed”)
x_observed =1×2表BoxConstraint KernelScale _____________ ___________ 953.22 - 0.26253
CriterionValue_observed = 0.0650
iteration_observed = 16.
的“min-observed”
准则选取第16次迭代得到的超参数作为最佳点。CriterionValue_observed
为使用所选超参数计算的实际交叉验证损耗。有关更多信息,请参见标准名称-值参数bestPoint
.
可视化优化的分类器。
d = 0.02;[x1Grid, x2Grid] = meshgrid (min (cdata (: 1)): d:马克斯(cdata (: 1)),...分钟(CDATA(:,2)):d:最大(CDATA(:,2)));xGrid = [x1Grid (:), x2Grid (:));[〜,分数] =预测(MDL,XGRID);图H(1:2)= gscatter(CDATA(:,1),CDATA(:,2),GRP,“rg”,'+ *');持有在H(3)=图(CDATA(Mdl.IsSuppo金宝apprtVector,1),...cdata (Mdl.I金宝appsSupportVector, 2),'KO');轮廓(x1Grid x2Grid,重塑(分数(:,2),大小(x1Grid)), [0 0),“k”);图例(H,{'-1',“+ 1”,“金宝app支持向量”},“位置”,“东南”);
评估新数据的准确性
生成和分类新的测试数据点。
grnobj = gmdistribution(grnpop,0.2 *眼(2));redobj = gmdistribution(redpop,0.2 *眼(2));newData =随机(grnobj,10);newData = [newData;随机(redobj,10)]。grpData =酮(20,1);% green = 1grpData(11:20)= -1;%的红色= -1v =预测(Mdl newData);
计算测试数据集上的误分类率。
L_Test =损失(MDL,newData,grpData)
L_Test = 0.3500
确定哪些新数据点被正确分类。将正确分类的点用红色方格表示,错误分类的点用黑色方格表示。
H(4:5)= gscatter(newData(:,1),newData(:,2),V,“mc”,“* *”);mydiff = (v == grpData);%分类正确为II = mydiff%在正确的点周围绘制红色方块h(6) =情节(newData (ii, 1), newData (ii, 2),“rs”,“MarkerSize”,12);结尾为2 =不(mydiff)%在错误点周围绘制黑色方块h(7) =情节(newData (ii, 1), newData (ii, 2),“ks”,“MarkerSize”,12);结尾图例(H,{“1”(培训),'+1(训练)',“金宝app支持向量”,...“1”(分类),“+ 1(分类)”,...正确分类的,“错误分类”},...“位置”,“东南”);持有从
这个例子展示了如何在观察网格上预测支持向量机模型的后验概率,然后在网格上绘制后验概率。绘制后验概率揭示了决策边界。
载入费雪的虹膜数据集。使用花瓣的长度和宽度训练分类器,并从数据中去除弗吉尼亚的物种。
负载渔民classKeep = ~ strcmp(物种,'virginica');X =量(classKeep 3:4);y =物种(classKeep);
使用这些数据训练一个支持向量机分类器。最好的做法是指定类的顺序。
SVMModel = fitcsvm(X,Y,“类名”, {'setosa',“多色的”});
估计最优分数变换函数。
rng (1);再现性的百分比[SVMModel, ScoreParameters] = fitPosterior (SVMModel);
警告:类是完全分离的。最优积分后验变换是一个阶跃函数。
ScoreParameters
ScoreParameters =结构与字段:类型:'step' LowerBound: -0.8431 UpperBound: 0.6897 PositiveClassProbability: 0.5000
最优分数变换函数是阶跃函数,因为类是可分离的。的字段下界
和UpperBound
的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({\{杂色的}})';h.YLabel.FontSize = 16;caxis ([0 1]);colormap飞机;持有在gscatter (X (: 1) X (:, 2), y,“mc”,“方式”,[15,10]);SV = X(SVMModel.Is金宝appSupportVector,:);情节(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);%标签预先配置θ= 0:(1 / d):(2 *π);r = 5;%圆半径rng (1);再现性的百分比为J = 1:n = 0;%空图像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) = figmat (:);%Store中的数据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 ('象限%d',y(结束))))
培训ECOC模式
使用25%的抵抗样本,并指定训练和抵抗样本指数。
P = 0.25;CVP = cvpartition(Y,“坚持”, p);交叉验证数据分区Isidx =培训(CVP);%训练样本指标oosIdx =测试(CVP);%测试样品指标
创建一个SVM模板,指定存储二进制学习者的支持向量。金宝app将其传递给培训数据fitcecoc
训练模型。确定训练样本分类误差。
t = templatesvm(“保存支持金宝app向量”,真正的);MdlSV = fitcecoc (X (isIdx:), Y (isIdx),“学习者”t);isLoss = resubLoss (MdlSV)
isLoss = 0
MdlSV
是一个培训ClassificationECOC
多级模型。它存储每个二进制学习者的训练数据和支持向量。金宝app对于大型数据集,例如图像分析中的数据集,该模型可能会消耗大量内存。
确定ECOC模型所消耗的磁盘空间量。
infoMdlSV =谁(“MdlSV”);mbMdlSV = infoMdlSV.bytes / 1.049 e6
mbMdlSV = 763.6150
该模型消耗763.6 MB。
提高模型效率
你可以评估样本外的表现。您还可以评估模型是否与不包含支持向量、相关参数和训练数据的压缩模型进行过拟合。金宝app
丢弃训练后ECOC模型中金宝app的支持向量和相关参数。然后,通过使用,从生成的模型中丢弃训练数据袖珍的
.
Mdl = discard金宝appSupportVectors (MdlSV);CMdl =紧凑(Mdl);信息=谁('mdl',“CMdl”);[bytesCMdl,bytesMdl] = info.bytes;memReduction = 1 - [bytesMdl bytesCMdl] /infoMdlSV.bytes
膜还原=1×20.0626 - 0.9996
在这种情况下,丢弃支持向量可以减少约6%的内存消耗。金宝app压缩和丢弃支持向量可以减少大约99.96%的大小。金宝app
管理支持向量的替代方法是通过指定较大的盒子约束,例如100金宝app.使用更少的支持向量的SVM模型更为希望并且消耗较少的内存,增加框架约束的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 subplot(3,3,j) imagesc(重塑(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机器学习研究杂志, 2005年第6卷,1889-1918页。
凯克曼V., T. -M。和M. Vogt。从大数据集训练核机的迭代单数据算法:理论与性能在金宝app支持向量机:理论与应用.王力波主编,255-274。柏林:斯普林格出版社,2005年版。