主要内容

金宝app二元分类的支持向量机

理解支持向量机金宝app

分离数据

当数据只有两个类时,可以使用金宝app支持向量机(SVM)。SVM通过寻找最佳超平面来对数据进行分类,该超平面将一个类的所有数据点从另一个类的所有数据点中分离出来。的最好的支持向量机的超平面是指最大的那个保证金在两个班之间。边距是指平行于没有内部数据点的超平面的平板的最大宽度。

金宝app支持向量是离分离超平面最近的数据点;这些点在板子的边界上。下图演示了这些定义,其中+表示类型1的数据点,-表示类型- 1的数据点。

数学公式:原始。本文的讨论由Hastie、Tibshirani和Friedman提出[1]还有克里斯汀尼和肖-泰勒[2]

用于训练的数据是一组点(向量)xj以及它们的类别yj.对于某些维度d,xjRd,以及yj=±1.超平面的方程是

f x x β + b 0

在哪里βRd而且b是实数。

下面的问题定义最好的分离超平面(即决策边界)。找到β而且b最小化||β||使所有数据点(xjyj),

y j f x j 1.

支持向量金宝app是xj在边界上,那些 y j f x j 1.

为了数学上的方便,这个问题通常被作为最小化的等价问题给出 β .这是一个二次规划问题。最优解 β b 启用向量分类z如下:

z 标志 z β + b 标志 f z

f z 分类分表示距离z是由边界决定的。

数学公式:对偶。求解对偶二次规划问题在计算上更为简单。为了获得对偶,取正的拉格朗日乘子αj乘以每个约束,从目标函数中减去:

l P 1 2 β β j α j y j x j β + b 1

的静止点在哪里lPβ而且b.设置渐变lP到0,得到

β j α j y j x j 0 j α j y j (1)

替换成lP,你就得到了对偶lD

l D j α j 1 2 j k α j α k y j y k x j x k

你可以对它进行最大化αj≥0.一般来说,很多αj最大值为0。非零的αj在对偶问题的解中定义超平面,如方程1,这就给出β的和αjyjxj.数据点xj对应于非零αj金宝app支持向量

的导数lD对于非零向量αj在最优时为0。这给了

y j f x j 1 0.

特别地,它给出了的值b解是任意的j与非零αj

对偶是一个标准的二次规划问题。例如,优化工具箱™quadprog(优化工具箱)Solver解决这类问题。

不可分的数据

您的数据可能不允许分离超平面。在这种情况下,SVM可以使用a软边缘,即分离许多但不是所有数据点的超平面。

软边际有两种标准公式。两者都涉及添加松弛变量ξj还有一个惩罚参数C

  • l1-norm问题是:

    最小值 β b ξ 1 2 β β + C j ξ j

    这样

    y j f x j 1 ξ j ξ j 0.

    l1-norm指使用ξj作为松弛变量而不是它们的平方。三个解算器选项SMOISDA,L1QPfitcsvm最小化l1规范的问题。

  • l2-norm问题是:

    最小值 β b ξ 1 2 β β + C j ξ j 2

    受制于相同的约束条件。

在这些公式中,你可以看到它在增加C将更多的权重放在松弛变量上ξj,这意味着优化尝试在类之间进行更严格的分离。同样,减少C趋近于0,错误分类就不那么重要了。

数学公式:对偶。为了便于计算,请考虑l1这个软边际公式的双重问题。使用拉格朗日乘法器μj的最小值函数l1-norm问题是:

l P 1 2 β β + C j ξ j j α j y f x j 1 ξ j j μ j ξ j

的静止点在哪里lPβb,且为正ξj.设置渐变lP到0,得到

β j α j y j x j j α j y j 0 α j C μ j α j μ j ξ j 0.

这些方程直接导致对偶公式:

马克斯 α j α j 1 2 j k α j α k y j y k x j x k

受限于

j y j α j 0 0 α j C

最后一组不等式,0≤αjC,说明了原因C有时被称为箱约束C保持拉格朗日乘子的允许值αj在一个“盒子”中,一个有界的区域。

的梯度方程b给出解决方案b对于非零集合αj,对应于支持向量。金宝app

你可以写出并求解对偶l2-范数问题。详情见Christianini和Shawe-Taylor[2],第六章。

fitcsvm实现。这两个对偶软裕度问题都是二次规划问题。在内部,fitcsvm有几种不同的算法来解决问题。

  • 对于一类或二元分类,如果未在数据中设置预期异常值的一部分(请参阅OutlierFraction),则默认解算器为顺序最小优化(SMO)。SMO通过一系列两点最小化最小化单范数问题。在优化过程中,SMO遵循线性约束 α y 0 并明确地在模型中包含偏差项。SMO相对较快。有关SMO的详细信息,请参见[3]

  • 对于二进制分类,如果您在数据中设置了预期异常值的一部分,那么默认的求解器是迭代单数据算法。和SMO一样,ISDA解决的是单一规范问题。与SMO不同的是,ISDA通过一系列的一点最小化最小化,不尊重线性约束,并且不显式地在模型中包括偏差项。有关ISDA的详细信息,请参见[4]

  • 对于单类或二进制分类,如果您拥有“优化工具箱”许可,则可以选择使用quadprog(优化工具箱)来解决单范数问题。quadprog使用大量内存,但解决二次程序的精度很高。详情请参见二次规划定义(优化工具箱)

核的非线性变换

一些二元分类问题没有简单的超平面作为有用的分离准则。对于这些问题,有一种数学方法的变体,它保留了SVM分离超平面几乎所有的简单性。

这种方法使用了这些来自复制内核理论的结果:

  • 有一类函数Gx1x2),具有以下属性。这是一个线性空间年代和一个函数φ映射x年代这样

    Gx1x2) = <φx1),φx2) >。

    点积发生在空间中年代

  • 这类函数包括:

    • 多项式:对于某个正整数p

      Gx1x2) = (1 +x1x2p

    • 径向基函数(高斯):

      Gx1x2) = exp(-∥x1- - - - - -x2)∥2).

    • 多层感知器或sigmoid(神经网络):用于正数p1一个负数p2

      Gx1x2) = tanh(p1x1x2+p2).

      请注意

利用核的数学方法依赖于超平面的计算方法。超平面分类的所有计算都只使用点积。下载188bet金宝搏因此,非线性核可以使用相同的计算和求解算法,并获得非线性的分类器。得到的分类器是某些空间中的超曲面年代,但是空间年代不需要识别或检查。

使用支持向量金宝app机

与任何监督学习模型一样,首先训练支持向量机,然后交叉验证分类器。金宝app使用训练过的机器对新数据进行分类(预测)。此外,为了获得令人满意的预测精度,可以使用各种SVM核函数,并且必须调整核函数的参数。

训练SVM分类器

训练SVM分类器,并可选地交叉验证fitcsvm.最常见的语法是:

SVMModel = fitcsvm(X,Y,'KernelFunction','rbf',…“标准化”,的确,“类名”,{‘negClass’,‘posClass});

输入如下:

  • X-预测器数据矩阵,其中每行是一个观察,每列是一个预测器。

  • Y-类标签的数组,每行对应于中相应行的值XY可以是类别、字符或字符串数组、逻辑或数字向量,或字符向量的单元格数组。

  • KernelFunction—默认值为“线性”对于两类学习,通过超平面分离数据。的值“高斯”(或“rbf”)是单类学习的默认值,并指定使用高斯(或径向基函数)核。成功训练支持向量机分类器的一个重要步骤是选择合适的核函数。

  • 标准化-标志,表明软件在训练分类器之前是否应该标准化预测器。

  • 一会—区分负类和正类,或者指定在数据中包含哪些类。负类是第一个元素(或字符数组的第一行),例如:“negClass”,而正类是第二个元素(或字符数组的行),例如:“posClass”一会必须是相同的数据类型Y.最好是指定类名,特别是在比较不同分类器的性能时。

得到的训练过的模型(SVMModel)包含来自SVM算法的优化参数,使您能够对新数据进行分类。

有关可用于控制训练的更多名称-值对,请参阅fitcsvm参考页面。

用SVM分类器分类新数据

使用以下方法分类新数据预测.使用经过训练的SVM分类器对新数据进行分类的语法(SVMModel)是:

[label,score] = predict(SVMModel,newX);

得到的向量,标签中每一行的分类X分数是一个n-by-2矩阵软得分。每一行都对应其中的一行X,这是一个新的发现。第一列包含被分类为阴性类的观察结果的分数,第二列包含被分类为阳性类的观察结果的分数。

为了估计后验概率而不是分数,首先通过训练好的SVM分类器(SVMModel)fitPosterior,该方法拟合分数到后验概率的转换函数。语法为:

ScoreSVMModel = fitPosterior(SVMModel,X,Y);

房地产ScoreTransform分类器的ScoreSVMModel包含最优变换函数。通过ScoreSVMModel预测.不是返回分数,而是输出参数分数包含被分类为负数的观察的后验概率(的第1列)分数)或正数(第2栏)分数)类。

优化SVM分类器

使用“OptimizeHyperparameters”的名称-值对参数fitcsvm找出使交叉验证损失最小化的参数值。合格的参数是“BoxConstraint”“KernelFunction”“KernelScale”“PolynomialOrder”,“标准化”.有关示例,请参见使用贝叶斯优化优化分类器拟合.或者,您可以使用bayesopt函数,如使用bayesopt优化交叉验证分类器.的bayesopt函数允许更灵活地自定义优化。您可以使用bayesopt函数来优化任何参数,包括在使用时不能优化的参数fitcsvm函数。

你也可以尝试根据这个方案手动调整你的分类器的参数:

  1. 将数据传递给fitcsvm,并设置名称-值对参数“KernelScale”、“汽车”.假设调用训练好的SVM模型SVMModel.该软件采用启发式方法选择内核尺度。启发式程序使用子抽样。因此,为了重现结果,设置一个随机数种子使用rng在训练分类器之前。

  2. 通过将分类器传递给crossval.默认情况下,该软件进行10次交叉验证。

  3. 将交叉验证的SVM模型传递给kfoldLoss估计和保留分类误差。

  4. 重新训练SVM分类器,但调整“KernelScale”而且“BoxConstraint”名称-值对参数。

    • BoxConstraint-一种策略是尝试框约束参数的几何序列。例如,取11个值,从1 e-51 e510倍。增加BoxConstraint可能会减少支持向量的数量,但也可能会增加训练时间。金宝app

    • KernelScale-一种策略是尝试RBF sigma参数在原始内核尺度上缩放的几何序列。这样做:

      1. 检索原始的内核规模,例如,ks,使用点表示法:ks = SVMModel.KernelParameters.Scale

      2. 使用原核比例因子作为新核比例因子。例如,乘法ks通过11个值1 e-51 e5增加了10倍。

选择产生最小分类错误的模型。您可能希望进一步细化参数以获得更好的精度。从初始参数开始,执行另一个交叉验证步骤,这次使用因子1.2。

使用高斯核训练SVM分类器

这个例子展示了如何生成具有高斯核函数的非线性分类器。首先,在二维空间内生成单元圆盘内的一类点,在半径1到半径2的环空中生成另一类点。然后,基于高斯径向基函数核的数据生成分类器。默认的线性分类器显然不适合这个问题,因为模型是圆对称的。将框约束参数设置为严格分类,即不错分训练点。其他内核函数可能无法使用这个严格的框约束,因为它们可能无法提供严格的分类。即使rbf分类器可以分离类,结果也可能被过度训练。

生成100个点均匀分布在单位盘上。为此,生成一个半径r作为一个均匀随机变量的平方根,生成一个角度t在(0, 2 π ),并将点放在(rcos (t),rsin (t))。

rng (1);%用于再现性R =√(rand(100,1));%半径T = 2*pi*rand(100,1);%的角度Data1 = [r.*cos(t), r.*sin(t)];%点

生成100个均匀分布在环空中的点。半径同样与平方根成正比,这次是均匀分布从1到4的平方根。

R2 =√(3*rand(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);轴平等的持有

图中包含一个轴对象。axis对象包含6个类型为line, text的对象。

把数据放在一个矩阵中,做一个分类向量。

Data3 = [data1;data2];class = ones(200,1);class(1:100) = -1;

训练SVM分类器KernelFunction设置为“rbf”而且BoxConstraint设置为.绘制决策边界,标记支持向量。金宝app

训练SVM分类器Cl = fitcsvm(data3, class,“KernelFunction”“rbf”...“BoxConstraint”正,“类名”[1]);在网格上预测分数D = 0.02;[x1Grid, x2Grid] = meshgrid (min (data3 (: 1)): d:马克斯(data3 (: 1)),...分钟(data3 (:, 2)): d:马克斯(data3 (:, 2)));xGrid = [x1Grid(:),x2Grid(:)];[~,scores] = predict(cl,xGrid);绘制数据和决策边界图;H (1:2) = gscatter(data3(:,1),data3(:,2),类,rb的“。”);持有ezpolar (@ (x) 1);h(3) = plot(data3(cl.Is金宝appSupportVector,1),data3(cl.IsSupportVector,2),“柯”);轮廓(x1Grid x2Grid,重塑(分数(:,2),大小(x1Grid)), [0 0),“k”);传奇(h, {' 1 '“+ 1”“金宝app支持向量”});轴平等的持有

图中包含一个轴对象。坐标轴对象包含线条、文本、轮廓等6个对象。这些对象表示-1,+1,支持向量。金宝app

fitcsvm生成一个接近半径为1的圆的分类器。这种差异是由于随机训练数据造成的。

使用默认参数的训练形成了一个更接近循环的分类边界,但它会错误地分类一些训练数据。的默认值BoxConstraint1,因此支持向量更多。金宝app

Cl2 = fitcsvm(data3, class,“KernelFunction”“rbf”);[~,scores2] = predict(cl2,xGrid);图;H (1:2) = gscatter(data3(:,1),data3(:,2),类,rb的“。”);持有ezpolar (@ (x) 1);h(3) = plot(data3(cl2.Is金宝appSupportVector,1),data3(cl2.IsSupportVector,2),“柯”);轮廓(x1Grid x2Grid,重塑(scores2(:, 2),大小(x1Grid)), [0 0),“k”);传奇(h, {' 1 '“+ 1”“金宝app支持向量”});轴平等的持有

图中包含一个轴对象。坐标轴对象包含线条、文本、轮廓等6个对象。这些对象表示-1,+1,支持向量。金宝app

使用自定义核训练SVM分类器

这个示例展示了如何使用自定义核函数(如sigmoid核)来训练SVM分类器,并调整自定义核函数参数。

在单位圆内生成一个随机点集。将第一和第三象限内的点标记为正类,将第二和第四象限内的点标记为负类。

rng (1);%用于再现性N = 100;%每象限的点数R1 =√(rand(2*n,1));%随机半径T1 = [pi/2*rand(n,1);(π/ 2 *兰德(n - 1) +π)];% Q1和Q3的随机角度X1 = [r1.*cos(t1) r1.*sin(t1)];%极坐标到笛卡尔坐标的转换R2 =√(rand(2*n,1));T2 = [pi/2*rand(n,1)+pi/2;(π/ 2 *兰德(n, 1) -π/ 2)];% Q2和Q4的随机角度X2 = [r2.*cos(t2) r2.*sin(t2)];X = [x1;X2);%预测Y = ones(4*n,1);Y(2*n + 1:结束)= -1;%的标签

绘制数据图。

图;gscatter (X (: 1) X (:, 2), Y);标题(“模拟数据散点图”

编写一个函数,接受特征空间中的两个矩阵作为输入,并使用sigmoid核将它们转换为Gram矩阵。

函数G = mysigmoid(U,V)%斜率为,截距为c的Sigmoid核函数Gamma = 1;C = -1;G = tanh(gamma*U*V' + c);结束

将此代码保存为一个名为mysigmoid在MATLAB®路径上。

使用sigmoid核函数训练SVM分类器。将数据标准化是一种很好的做法。

Mdl1 = fitcsvm(X,Y,“KernelFunction”“mysigmoid”“标准化”,真正的);

Mdl1是一个ClassificationSVM包含估计参数的分类器。

绘制数据,并确定支持向量和决策边界。金宝app

在网格上计算分数D = 0.02;网格的步长[x1Grid, x2Grid] = meshgrid (min (X (: 1)): d:马克斯(X (: 1))...min (X (:, 2)): d:马克斯(X (:, 2)));xGrid = [x1Grid(:),x2Grid(:)];%网格[~,scores1] = predict(Mdl1,xGrid);%分数图;h(1:2) = gscatter(X(:,1),X(:,2),Y);持有h(3) = plot(X(Mdl1.Is金宝appSupportVector,1),...X (Mdl1.I金宝appsSupportVector, 2),“柯”“MarkerSize”10);%支金宝app持向量轮廓(x1Grid x2Grid,重塑(scores1(:, 2),大小(x1Grid)), [0 0),“k”);%决策边界标题(“带决策边界的散点图”)({传奇' 1 '' 1 '“金宝app支持向量”},“位置”“最佳”);持有

您可以通过调整内核参数来改进决策边界的形状。这也可能降低样本内的误分类率,但是,您应该首先确定样本外的误分类率。

通过10倍交叉验证确定样本外误分类率。

CVMdl1 = crossval(Mdl1);misclass1 = kfoldLoss(CVMdl1);misclass1
Misclass1 = 0.1350

样本外误分类率为13.5%。

写另一个sigmoid函数,但是SetGamma = 0.5;

函数G = mysigmoid2(U,V)%斜率为,截距为c的Sigmoid核函数Gamma = 0.5;C = -1;G = tanh(gamma*U*V' + c);结束

将此代码保存为一个名为mysigmoid2在MATLAB®路径上。

使用调整后的sigmoid核训练另一个SVM分类器。绘制数据和决策区域,确定样本外误分类率。

Mdl2 = fitcsvm(X,Y,“KernelFunction”“mysigmoid2”“标准化”,真正的);[~,scores2] = predict(Mdl2,xGrid);图;h(1:2) = gscatter(X(:,1),X(:,2),Y);持有h(3) = plot(X(Mdl2.Is金宝appSupportVector,1),...X (Mdl2.I金宝appsSupportVector, 2),“柯”“MarkerSize”10);标题(“带决策边界的散点图”)轮廓(x1Grid,x2Grid,重塑(scores2(:,2),大小(x1Grid)),[0 0],,“k”);传奇({' 1 '' 1 '“金宝app支持向量”},“位置”“最佳”);持有CVMdl2 = crossval(Mdl2);misclass2 = kfoldLoss(CVMdl2);misclass2
Misclass2 = 0.0450

经过s型斜率调整后,新的决策边界似乎提供了更好的样本内拟合,交叉验证率收缩了66%以上。

使用贝叶斯优化优化分类器拟合

方法优化支持向量机分类fitcsvm功能和OptimizeHyperparameters名称-值参数。

生成数据

分类工作的点的位置从高斯混合模型。在统计学习的要素, Hastie, Tibshirani, and Friedman(2009),第17页描述了该模型。该模型首先为“绿色”类生成10个基点,分布为均值(1,0)和单位方差的二维独立法线。它还为“红色”类生成10个基点,分布为均值(0,1)和单位方差的二维独立法线。对于每个类别(绿色和红色),生成100个随机点,如下所示:

  1. 选择一个基准点随机均匀地涂上适当的颜色。

  2. 生成具有均值的二维正态分布的独立随机点和方差I/5,其中I是2 × 2单位矩阵。在本例中,使用方差I/50来更清楚地显示优化的优势。

为每个类生成10个基点。

rng (“默认”%用于再现性Grnpop = mvnrnd([1,0],eye(2),10);Redpop = mvnrnd([0,1],eye(2),10);

查看基准点。

情节(grnpop (: 1) grnpop (:, 2),“去”)举行情节(redpop (: 1) redpop (:, 2),“罗”)举行

图中包含一个轴对象。axis对象包含2个line类型的对象。

由于一些红色基点接近绿色基点,因此仅根据位置很难对数据点进行分类。

生成每个类的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),“罗”)举行

图中包含一个轴对象。axis对象包含2个line类型的对象。

为分类准备数据

把数据放到一个矩阵中,然后做一个向量grp标记每个点的类。1表示绿色类,-1表示红色类。

Cdata = [grnpts;redpts];GRP = ones(200,1);Grp (101:200) = -1;

准备交叉验证

为交叉验证设置一个分区。

C = cvpartition(200,“KFold”10);

该步骤是可选的。如果您为优化指定了一个分区,那么您就可以为返回的模型计算实际的交叉验证损失。

优化匹配

为了找到一个良好的拟合,即具有最优超参数的拟合,可以使用贝叶斯优化。属性指定要优化的超参数列表OptimizeHyperparameters名称-值参数,并使用HyperparameterOptimizationOptions名称-值参数。

指定“OptimizeHyperparameters”作为“汽车”.的“汽车”选项包含一组要优化的典型超参数。fitcsvm找到的最优值BoxConstraint而且KernelScale.设置超参数优化选项以使用交叉验证分区c然后选择“expected-improvement-plus”再现性的获取函数。默认的采集函数取决于运行时,因此可以给出不同的结果。

Opts = struct(“CVPartition”c“AcquisitionFunctionName”“expected-improvement-plus”);Mdl = fitcsvm(cdata,grp,“KernelFunction”“rbf”...“OptimizeHyperparameters”“汽车”“HyperparameterOptimizationOptions”选择)
|=====================================================================================================| | Iter | Eval客观客观| | | BestSoFar | BestSoFar | BoxConstraint | KernelScale | | |结果| |运行时| | (estim(观察) .) | | | |=====================================================================================================| | 最好1 | | 0.345 | 0.15259 | 0.345 | 0.345 | 0.00474 | 306.44 | | 2 |最好| 0.115 | 0.10129 | 0.115 | 0.12678 | 430.31 | 1.4864 | | 3 |接受| 0.52 | 0.19601 | 0.115 | 0.1152 | 0.028415 | 0.014369 | | 4 |接受| 0.61 | 0.19179 | 0.115 | 0.11504 | 133.94 | 0.0031427 | | 5 |接受| 0.34 | 0.2641 | 0.115 | 0.11504 | 0.010993 | 5.7742 | | 6 |的| 0.085 | 0.13069 | 0.085 | 0.085039 | 885.63 | 0.68403 | | | 7日接受| 0.105 | 0.16678 | 0.085 | 0.085428 | 0.3057 | 0.58118 | | |接受8 | 0.21 | 0.19151 | 0.085 | 0.09566 | 0.16044 | 0.91824 | | | 9日接受| 0.085 | 0.19728 | 0.085 | 0.08725 | 972.19 | 0.46259 | | 10 |接受| 0.1 |0.24964 | 0.085 | 0.090952 | 990.29 | 0.491 | |最好11 | | 0.08 | 0.17037 | 0.08 | 0.079362 | 2.5195 | 0.291 | | | 12日接受| 0.09 | 0.12204 | 0.08 | 0.08402 | 14.338 | 0.44386 | | | 13日接受| 0.1 | 0.16216 | 0.08 | 0.08508 | 0.0022577 | 0.23803 | | | 14日接受| 0.11 | 0.23621 | 0.08 | 0.087378 | 0.2115 | 0.32109 | |最好15 | | 0.07 | 0.18117 | 0.07 | 0.081507 | 910.2 | 0.25218 | | 16最好| | 0.065 | 0.18389 | 0.065 | 0.072457 | 953.22 | 0.26253 | | | 17日接受| 0.075 | 0.27043 | 0.065 |0.072554 | 998.74 | 0.23087 | | 18 | Accept | 0.295 | 0.17016 | 0.065 | 0.072647 | 996.18 | 44.626 | | 19 | Accept | 0.07 | 0.17971 | 0.065 | 0.06946 | 985.37 | 0.27389 | | 20 | Accept | 0.165 | 0.20585 | 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.16283 | 0.065 | 0.071764 | 971.7 | 999.01 | | 22 | Accept | 0.61 | 0.18862 | 0.065 | 0.071967 | 0.0010168 | 0.0010005 | | 23 | Accept | 0.345 | 0.17211 | 0.065 | 0.071959 | 0.0011459 | 995.89 | | 24 | Accept | 0.35 | 0.1867 | 0.065 | 0.071863 | 0.0010003 | 40.628 | | 25 | Accept | 0.24 | 0.31191 | 0.065 | 0.072124 | 996.55 | 10.423 | | 26 | Accept | 0.61 | 0.1737 | 0.065 | 0.072067 | 994.71 | 0.0010063 | | 27 | Accept | 0.47 | 0.12519 | 0.065 | 0.07218 | 993.69 | 0.029723 | | 28 | Accept | 0.3 | 0.12101 | 0.065 | 0.072291 | 993.15 | 170.01 | | 29 | Accept | 0.16 | 0.26368 | 0.065 | 0.072103 | 992.81 | 3.8594 | | 30 | Accept | 0.365 | 0.18218 | 0.065 | 0.072112 | 0.0010017 | 0.044287 |

图中包含一个轴对象。标题为Min objective vs. Number of function的axis对象包含2个类型为line的对象。这些对象代表最小观测目标,估计最小目标。

图中包含一个轴对象。标题为目标函数模型的轴对象包含线、面、等高线类型的5个对象。这些对象代表观测点,模型均值,下一个点,模型最小可行。

__________________________________________________________ 优化完成。最大目标达到30个。总函数评估:30总运行时间:27.3487秒总目标函数评估时间:5.6116最佳观测可行点:BoxConstraint KernelScale _____________ ___________ 953.22 0.26253观测目标函数值= 0.065估计目标函数值= 0.073726函数评估时间= 0.18389最佳估计可行点(根据模型):BoxConstraint KernelScale _____________ ___________ 985.37 0.27389估计目标函数值= 0.072112估计函数评估时间= 0.18119
Mdl = ClassificationSVM ResponseName: 'Y' CategoricalPredictors: [] ClassNames: [-1 1] ScoreTransform: 'none' NumObservations: 200 HyperparameterOptimizationResults: [1x1 bayesioptimization] Alpha: [77x1 double] Bias: -0.2352 KernelParameters: [1x1 struct] BoxConstraints: [200x1 double] ConvergenceInfo: [1x1 struct] IsSu金宝apppportVector: [200x1 logical] Solver: 'SMO' Properties, Methods

fitcsvm返回一个ClassificationSVM使用最佳估计可行点的模型对象。基于贝叶斯优化过程的底层高斯过程模型,最佳估计可行点是使交叉验证损失的置信上限最小化的超参数集。

贝叶斯优化过程内部维持了目标函数的高斯过程模型。目标函数为交叉验证的分类误分类率。对于每次迭代,优化过程都会更新高斯过程模型,并使用该模型找到一组新的超参数。迭代显示的每一行都显示了新的超参数集和这些列值:

  • 客观的-在新的超参数集上计算目标函数值。

  • 目标运行时-目标函数评价时间。

  • Eval结果—结果报告,指定为接受最好的,或错误接受表示目标函数返回一个有限值,和错误指示目标函数返回一个不是有限实标量的值。最好的指示目标函数返回一个有限值,该值低于先前计算的目标函数值。

  • BestSoFar(观察)-目前计算的最小目标函数值。此值是当前迭代的目标函数值(如果Eval结果当前迭代的值为最好的)或前一个的值最好的迭代。

  • BestSoFar (estim)。-在每次迭代中,软件在迄今为止尝试的所有超参数集上,使用更新的高斯过程模型估计目标函数值的置信上限。然后软件选择上置信界最小的点。的BestSoFar (estim)。方法返回的目标函数值predictObjective函数在最小值处。

迭代显示下面的图显示BestSoFar(观察)而且BestSoFar (estim)。分别用蓝色和绿色表示。

返回的对象Mdl使用最佳估计可行点,即产生的超参数集BestSoFar (estim)。在最终的高斯过程模型的基础上进行最后的迭代。

你可以得到最好的点从HyperparameterOptimizationResults属性或通过使用bestPoint函数。

Mdl.HyperparameterOptimizationResults.XAtMinEstimatedObjective
ans =1×2表BoxConstraint KernelScale  _____________ ___________ 985.37 - 0.27389
[x,CriterionValue,iteration] = bestPoint(mml . hyperparameteroptimizationresults)
x =1×2表BoxConstraint KernelScale  _____________ ___________ 985.37 - 0.27389
CriterionValue = 0.0888
迭代= 19

默认情况下,bestPoint函数使用“min-visited-upper-confidence-interval”标准。该准则选取第19次迭代得到的超参数作为最佳点。CriterionValue为最终高斯过程模型计算的交叉验证损失的上界。通过使用分区计算实际的交叉验证损失c

L_MinEstimated = kfoldLoss(fitcsvm(cdata,grp,“CVPartition”c“KernelFunction”“rbf”...“BoxConstraint”x。BoxConstraint,“KernelScale”, x.KernelScale))
L_MinEstimated = 0.0700

实际交叉验证的损失接近估计值。的目标函数估计值优化结果图下方显示。

您还可以提取最佳观测可行点(即最后最好的点在迭代显示)从HyperparameterOptimizationResults属性或通过指定标准作为“min-observed”

Mdl.HyperparameterOptimizationResults.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”Criterion选择第16次迭代得到的超参数作为最佳点。CriterionValue_observed使用所选超参数计算的实际交叉验证损失。有关更多信息,请参见标准的名称-值参数bestPoint

可视化优化后的分类器。

D = 0.02;[x1Grid, x2Grid] = meshgrid (min (cdata (: 1)): d:马克斯(cdata (: 1)),...分钟(cdata (:, 2)): d:马克斯(cdata (:, 2)));xGrid = [x1Grid(:),x2Grid(:)];[~,scores] = predict(Mdl,xGrid);图h (1:2) = gscatter (cdata (: 1), cdata (:, 2), grp,“rg”' + *’);持有h(3) = plot(cdata(mld . 金宝appissupportvector,1),...cdata (Mdl.I金宝appsSupportVector, 2),“柯”);轮廓(x1Grid x2Grid,重塑(分数(:,2),大小(x1Grid)), [0 0),“k”);传奇(h, {' 1 '“+ 1”“金宝app支持向量”},“位置”“东南”);

图中包含一个轴对象。坐标轴对象包含线、轮廓等4个对象。这些对象表示-1,+1,支持向量。金宝app

评估新数据的准确性

生成并分类新的测试数据点。

Grnobj = gmdistribution(grnpop,.2*eye(2));Redobj = gmdistribution(redpop,.2*eye(2));newData = random(grnobj,10);newData = [newData;random(redobj,10)];grpData = ones(20,1);%绿色= 1grpData(11:20) = -1;%红色= -1v = predict(Mdl,newData);

计算测试数据集上的误分类率。

L_Test = loss(Mdl,newData,grpData)
L_Test = 0.3500

确定哪些新数据点被正确分类。将正确分类的点格式化为红色方块,将错误分类的点格式化为黑色方块。

h(4:5) = gscatter(newData(:,1),newData(:,2),v,“mc”“* *”);mydiff = (v == grpData);%正确分类Ii = mydiff在正确的点周围画红方块h(6) = plot(newData(ii,1),newData(ii,2),“rs”“MarkerSize”12);结束Ii = not(mydiff)在不正确的点周围画黑色方块h(7) = plot(newData(ii,1),newData(ii,2),“ks”“MarkerSize”12);结束传奇(h, {“1”(培训)“+ 1(培训)”“金宝app支持向量”...“1”(分类)“+ 1(分类)”...正确分类的“是不是”},...“位置”“东南”);持有

图中包含一个轴对象。坐标轴对象包含8个对象类型的线,轮廓。这些对象表示-1(训练),+1(训练),支持向量,-1(分类),+1(分类),正确分类,错误分类。金宝app

为支持向量机分类模型绘制后验概率区域

这个例子展示了如何预测SVM模型在一个观测网格上的后验概率,然后绘制网格上的后验概率。绘制后验概率可以暴露决策边界。

加载费雪的虹膜数据集。利用花瓣的长度和宽度训练分类器,并从数据中去除virvirica种。

负载fisheririsclassKeep = ~strcmp(物种,“virginica”);X = meas(classKeep,3:4);y = species(classKeep);

使用数据训练支持向量机分类器。指定类的顺序是一个很好的实践。

SVMModel = fitcsvm(X,y,“类名”, {“setosa”“多色的”});

估计最优分数变换函数。

rng (1);%用于再现性[SVMModel,ScoreParameters] = fitPosterior(SVMModel);
警告:类是完全分离的。最优分数-后验变换是一个阶跃函数。
ScoreParameters
ScoreParameters =带字段的结构:Type: 'step' LowerBound: -0.8431 UpperBound: 0.6897 PositiveClassProbability: 0.5000

最优分数转换函数是阶跃函数,因为类是可分离的。的字段下界而且UpperBoundScoreParameters指示与类分离超平面内的观测值对应的分数区间的上端点和下端点(边缘)。没有训练观察结果在此范围内。如果一个新的分数在区间内,那么软件将相应的观察值赋给一个正的类后验概率,即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] = predict(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”“方式”10],[15日);sv = X(SVMModel.Is金宝appSupportVector,:);情节(sv (: 1), sv (:, 2),“哟”“MarkerSize”15岁的“线宽”2);轴持有

图中包含一个轴对象。坐标轴对象包含等高线、直线等4个对象。这些物件代表了彩色。

在两类学习中,如果类是可分离的,那么有三个区域:一个是观察值具有正的类后验概率0一个是它所在的地方1,另一种是正类先验概率。

使用线性支持向量机分析图像金宝app

这个例子展示了如何通过训练由线性支持向量机二元学习器组成的错误校正输出代码(ECOC)模型来确定形状占据图像的哪个象限。这个示例还说明了存储支持向量、它们的标签和估价值的ECOC模型的磁盘空间消耗金宝app α 系数。

创建数据集

在50 * 50的图像中随机放置一个半径为5的圆。制作5000张图片。为每个图像创建一个标签,表明圆圈所占据的象限。象限1在右上,象限2在左上,象限3在左下,象限4在右下。预测器是每个像素的强度。

D = 50;%图像的高度和宽度,以像素为单位N = 5e4;%样本量X = 0 (n,d^2);预测器矩阵预分配Y = 0 (n,1);标签预分配= 0:(1/d):(2*pi);R = 5;%圆半径rng (1);%用于再现性J = 1:n figmat = 0 (d);%空图像C = datasample((r + 1):(d - r - 1),2);%随机圆心X = r*cos(theta) + c(1);%画圆Y = r*sin(theta) + c(2);Idx = sub2ind([d d],round(y),round(x));转换为线性索引Figmat (idx) = 1;%画圆X(j,:) = figmat(:);存储数据Y (j) = (c(2) > =地板(d / 2) + 2 * (c(2) <地板(d / 2)) +...(c(1) < floor(d/2)) +...2*(c(1) >= floor(d/2)) & (c(2) < floor(d/2)));确定象限结束

画一个观察图。

图imagesc(figmat) h = gca;h.YDir =“正常”;标题(sprintf (“象限% d 'Y(结束)))

图中包含一个轴对象。标题为象限1的坐标轴对象包含一个image类型的对象。

训练ECOC模型

使用25%的坚持样本,并指定训练和坚持样本指标。

P = 0.25;CVP = cvpartition(Y,“坚持”, p);%交叉验证数据分区isIdx = training(CVP);%训练样本指数oosIdx = test(CVP);测试样本指数

创建一个SVM模板,指定存储二元学习器的支持向量。金宝app把它和训练数据传递给fitcecoc训练模型。确定训练样本的分类误差。

t = templateSVM(“Save金宝appSupportVectors”,真正的);MdlSV = fitcecoc(X(isIdx,:)),Y(isIdx),“学习者”t);isLoss = resubLoss(MdlSV)
isLoss = 0

MdlSV是受过训练的ClassificationECOC多级模型。它存储每个二元学习器的训练数据和支持向量。金宝app对于大型数据集,例如图像分析中的数据集,模型可能会消耗大量内存。

确定ECOC模型所消耗的磁盘空间量。

infoMdlSV = whos(“MdlSV”);mbMdlSV = infoMdlSV.bytes/1.049e6
mbMdlSV = 763.6150

该模型占用763.6 MB。

提高模型效率

你可以评估样本外的性能。您还可以评估模型是否与不包含支持向量、相关参数和训练数据的压缩模型过拟合。金宝app

丢弃训练后ECOC模型中金宝app的支持向量和相关参数。然后,通过使用丢弃结果模型中的训练数据紧凑的

Mdl = discard金宝appSupportVectors(MdlSV);CMdl =紧凑(Mdl);信息= whoos (“Mdl”“CMdl”);[bytesCMdl,bytesMdl] = info.bytes;memReduction = 1 - [bytesMdl bytesCMdl]/infoMdlSV.bytes
memReduction =1×20.0626 - 0.9996

在这种情况下,丢弃支持向量可以减少约6%的内存消耗。金宝app压缩和丢弃支持向量可以减少大约99.96%的大小。金宝app

管理支持向量的另一种方法是在训练期间通过指定更大的框约束(金宝app例如100)来减少它们的数量。虽然支持向量机模型使用更少的支持向量是更可取的,消耗更少的内存,但金宝app增加盒子约束的值往往会增加训练时间。

删除MdlSV而且Mdl从工作空间。

清晰的MdlMdlSV

评估不合格样品的性能

计算不合格样品的分类误差。绘制一个坚持样本预测的样本。

oosLoss = loss(CMdl,X(oosIdx,:),Y(oosIdx))
oosLoss = 0
yHat =预测(CMdl,X(oosIdx,:));nVec = 1:size(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)

图中包含9个轴对象。轴对象1的标题象限:3包含一个图像类型的对象。象限:2包含一个image类型的对象。轴对象3的标题象限:2包含一个图像类型的对象。轴对象4的标题象限:2包含一个图像类型的对象。轴对象5的标题象限:1包含一个图像类型的对象。轴对象6的标题象限:2包含一个图像类型的对象。轴对象7的标题象限:4包含一个图像类型的对象。轴对象8的标题象限:4包含一个图像类型的对象。轴对象9与标题象限:3包含2个类型为图像,文本的对象。

该模型没有错误分类任何坚持样本观测。

另请参阅

||

相关的话题

参考文献

哈斯蒂、T.、R.蒂布谢拉尼和J.弗里德曼。统计学习的要素,第二版。纽约:施普林格,2008。

[2]克里斯汀尼,N.和J.肖-泰勒。支持向量机和其他基于核的学习方法简介金宝app.英国剑桥:剑桥大学出版社,2000年。

[3]范,r.e。,林志信。陈和c - j。林。“使用二阶信息训练支持向量机的工作集选择。”金宝app机器学习研究杂志, 2005年第6卷,第1889-1918页。

[4]凯克曼V. -M。黄和M.沃格特。从庞大数据集训练核心机器的迭代单数据算法:理论和性能。在金宝app支持向量机:理论与应用.王立波编辑,255-274。柏林:斯普林格出版社,2005年。