主要内容

万博1manbetx支持向量机的二进制分类

理解支持向量机万博1manbetx

可分离数据

当数据正好有两个类时,可以使万博1manbetx用支持向量机(SVM)。支持向量机通过寻找最好的超平面将一类数据点从另一类数据点中分离出来来分类数据。的最好的事物支持向量机的超平面指的是最大的那个保证金在两个班之间。边际是指平行于没有内部数据点的超平面的板的最大宽度。

万博1manbetx支持向量是离分离超平面最近的数据点;这些点都在板的边界上。下图说明了这些定义,+表示类型1的数据点,-表示类型- 1的数据点。

数学公式:原始。这个讨论是在Hastie、Tibshirani和Friedman之后进行的[1]还有克里斯琴尼尼和肖-泰勒[2]

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

f x x β + b 0

在哪里βRdb是实数。

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

y j f x j 1。

支持向量万博1manbetx是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万博1manbetx支持向量

的导数lD对于一个非零的αj最优值是0。这给了

y j f x j 1 0。

特别是,这给出了价值b通过取任意的解j与非零αj

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

不可分的数据

您的数据可能不允许一个分离的超平面。在这种情况下,SVM可以使用柔软的边缘,这意味着一个分离了许多但不是所有数据点的超平面。

有两种标准的柔软边缘配方。两者都涉及添加松弛变量ξj还有一个惩罚参数C

  • l1规范的问题是:

    β b ξ 1 2 β β + C j ξ j

    这样

    y j f x j 1 ξ j ξ j 0。

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

  • l2规范的问题是:

    β b ξ 1 2 β β + C j ξ j 2

    受同样的约束。

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

数学制定:双重。为了更简单的计算,考虑l1这种软边际公式存在双重问题。使用拉格朗日乘数法μj的最小值函数l1规范的问题是:

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,对应于支持向量。万博1manbetx

你可以写出并解出它的对偶l2- 以类似的方式出现问题。有关详细信息,请参阅Christianini和Shawe-Taylor[2],第6章。

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

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

  • 对于二进制分类,如果您在数据中设置了预期离群值的一部分,那么默认解算器是迭代单数据算法。与SMO一样,ISDA解决了单一规范的问题。与SMO不同,ISDA通过一系列单点最小化来实现最小化,不考虑线性约束,也不明确地在模型中包含偏差项。有关ISDA的详细信息,请参见[4]

  • 对于一个类或二进制分类,如果您有一个Optimization Toolbox许可证,您可以选择使用quadprog(优化工具箱)解决单一标准的问题。quadprog使用大量的内存,但解决二次程序的高度精度。有关详细信息,请参见二次规划的定义(优化工具箱)

带有核的非线性变换

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

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

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

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

    点积发生在空间中年代

  • 这类功能包括:

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

      Gx1x2) = (1 +x1x2p

    • 径向基功能(高斯):

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

    • 多层感知器或乙状体(神经网络):对于一个正数p1和一个负数p2

      Gx1x2) =双曲正切(p1x1x2+p2)。

      请注意

使用核的数学方法依赖于超平面的计算方法。超平面分类的所有计算都使用点积。s manbetx 845因此,非线性核可以使用相同的计算和求解算法,得到非线性的分类器。得到的分类器是某些空间中的超曲面年代,但空间年代不需要被识别或检查。

使用支持向量万博1manbetx机

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

训练SVM分类器

火车,以及可选的交叉验证,使用SVM分类器使用fitcsvm.最常见的语法是:

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

输入:

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

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

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

  • 标准化- 指示软件是否应在培训分类器之前标准化预测器的标志。

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

由此产生的经过训练的模型(svmmodel.)包含来自SVM算法的优化参数,使您能够对新数据进行分类。

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

用SVM分类器对新数据进行分类

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

[标签,得分] =预测(SVMMODEL,NEWX);

由此产生的向量,标签,表示中每一行的分类X分数是一个n软分数的- × 2矩阵。每一行对应于X这是一个新的观察结果。第一列包含被分类为负类的观察的分数,第二列包含被分类为正类的观察的分数。

要估计后验概率而不是分数,首先通过训练的SVM分类器(svmmodel.)fitPosterior,对分数拟合一个分数-后验概率转换函数。的语法是:

ScoreSVMModel = fitPosterior (SVMModel, X, Y);

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

优化SVM分类器

使用“OptimizeHyperparameters”名称 - 值对参数fitcsvm查找最小化交叉验证损失的参数值。符合条件的参数是“BoxConstraint”“KernelFunction”“KernelScale”“PolynomialOrder”, 和“标准化”.例如,请参见使用贝叶斯优化优化SVM分类器.或者,您可以使用bayesopt函数,如使用贝叶斯算法优化交叉验证的SVM分类器.的bayesopt功能允许更灵活的自定义优化。你可以使用bayesopt函数来优化任何参数,包括使用时不适合优化的参数fitcsvm函数。

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

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

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

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

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

    • BoxConstraint-一种策略是尝试一个几何序列的框约束参数。例如,取11个值,从1 e-51 e5是10的倍数。增加BoxConstraint可能会降低支持向量的数量,但也可能会增加培训时间。万博1manbetx

    • 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 =√兰特(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的点和绘图圆圈以进行比较。

图;情节(data1 (: 1) data1 (:, 2),“r”。'Markersize', 15)情节(data2(: 1)、data2 (:, 2),“b”。'Markersize'15) ezpolar (@ (x) 1); ezpolar (@ (x) 2);轴平等的持有离开

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

将数据放入一个矩阵中,并做一个分类向量。

data3 = [data1; data2);theclass = 1 (200 1);theclass (1:10 0) = 1;

训练一个支持向量机分类器KernelFunction设置为“rbf”BoxConstraint设置为.绘制决策边界并标记支持向量。万博1manbetx

%训练SVM分类器成立这个,课程cl = fitcsvm (data3,“KernelFunction”“rbf”...“BoxConstraint”正,“类名”[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)= plot(data3(cl.iss万博1manbetxupportvector,1),data3(cl.issupportvector,2),“柯”);轮廓(x1Grid x2Grid,重塑(分数(:,2),大小(x1Grid)), [0 0),“k”);传奇(h, {' 1 '“+ 1”“万博1manbetx支持向量”});轴平等的持有离开

图中包含一个坐标轴。轴线包含字体线、文字、轮廓等6个对象。这些对象代表-1,+1,支持向量。万博1manbetx

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

使用默认参数进行训练会产生一个更接近圆形的分类边界,但它会对一些训练数据进行错误分类。的默认值BoxConstraint1,因此有更多的支持向量。万博1manbetx

cl2 = fitcsvm(data3,theclass,“KernelFunction”“rbf”);[~, scores2] =预测(这有点难度,xGrid);图;h (1:2) = gscatter (data3 (: 1), data3 (:, 2), theclass,rb的“。”);持有ezpolar (@ (x) 1);h(3) =情节(data3 (cl2.IsSu万博1manbetxpportVector, 1), data3 (cl2.IsSupportVector, 2),“柯”);轮廓(x1Grid x2Grid,重塑(scores2(:, 2),大小(x1Grid)), [0 0),“k”);传奇(h, {' 1 '“+ 1”“万博1manbetx支持向量”});轴平等的持有离开

图中包含一个坐标轴。轴线包含字体线、文字、轮廓等6个对象。这些对象代表-1,+1,支持向量。万博1manbetx

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

这个例子展示了如何使用自定义核函数,如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 =√兰特(2 * n, 1));t2 =[π/ 2 *兰德(n, 1) +π/ 2;(π/ 2 *兰德(n, 1) -π/ 2)];Q2和Q4的随机角度X2 = [r2.*cos(t2) r2.*sin(t2)];X = [X1;X2);%预测Y = 1 (4 * n, 1);Y(2*n + 1:end) = -1;%的标签

图数据。

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

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

函数g = mysigmoid(U,V)s形核函数,斜率为gamma,截距为cγ= 1;c = 1;n = U*V' + c;结束

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

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

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

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

绘制数据,识别支持向量和决策边界。万博1manbetx

%在网格上计算得分d = 0.02;%网格的步长[x1grid,x2grid] = meshgrid(min(x(:,1)):d:max(x(:,1)),...min (X (:, 2)): d:马克斯(X (:, 2)));xGrid = [x1Grid (:), x2Grid (:));%的网格[~, scores1] =预测(Mdl1 xGrid);%的分数图;h (1:2) = gscatter (X (: 1), (:, 2), Y);持有h(3) =情节(X (Mdl1.IsSu万博1manbetxpportVector, 1),...X (Mdl1.I万博1manbetxsSupportVector, 2),“柯”'Markersize'10);%的万博1manbetx支持向量轮廓(x1Grid x2Grid,重塑(scores1(:, 2),大小(x1Grid)), [0 0),“k”);%决策边界标题(“带有决策边界的散点图”)({传奇' 1 ''1'“万博1manbetx支持向量”},'地点'“最佳”);持有离开

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

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

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

样本外误分类率为13.5%。

写另一个s型函数,但是Setγ= 0.5;

函数G = mysigmoid2 (U, V)s形核函数,斜率为gamma,截距为cγ= 0.5;c = 1;n = U*V' + c;结束

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

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

mdl2 = fitcsvm(x,y,“KernelFunction”“mysigmoid2”“标准化”,真正的);[~, scores2] =预测(Mdl2 xGrid);图;h (1:2) = gscatter (X (: 1), (:, 2), Y);持有h(3) =情节(X (Mdl2.IsSu万博1manbetxpportVector, 1),...X (Mdl2.I万博1manbetxsSupportVector, 2),“柯”'Markersize'10);标题(“带有决策边界的散点图”)轮廓(x1Grid x2Grid,重塑(scores2(:, 2),大小(x1Grid)), [0 0),“k”);传奇({' 1 ''1'“万博1manbetx支持向量”},'地点'“最佳”);持有离开cvmdl2 = crossval(mdl2);misclass2 = kfoldloss(cvmdl2);misclass2.
MISCLASS2 = 0.0450.

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

使用贝叶斯优化优化SVM分类器

这个例子展示了如何优化SVM分类使用fitcsvm功能和OptimizeHyperparameters名称-值对。分类工作在一个高斯混合模型的点的位置。在统计学习的要素, Hastie, Tibshirani, and Friedman(2009),第17页描述了这个模型。该模型首先为“绿色”类生成10个基点,分布为均值(1,0)和单位方差的2-D独立正态分布。它还为“红色”类生成10个基点,分布为均值(0,1)和单位方差的2-D独立正态分布。对于每个职业(绿色和红色),生成100个随机点数如下:

  1. 选择一个基点适当的颜色均匀随意。

  2. 生成一个独立的具有二维正态分布的随机点和方差I / 5,其中我是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),“罗”)举行离开

图中包含一个坐标轴。轴线包含2个线型对象。

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

生成每个类的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),“去”)举行绘图(已删除(:,1),已删除(:,2),“罗”)举行离开

图中包含一个坐标轴。轴线包含2个线型对象。

准备分类数据

将数据放入一个矩阵,并生成一个向量grp标记每个点的类别。

cdata = [grnpts; redpts];grp = 1 (200 1);%绿色标签1,红色标签-1grp (101:200) = 1;

准备交叉验证

为交叉验证设置分区。此步骤修复优化在每个步骤中使用的列车和测试集。

c = cvpartition (200“KFold”10);

优化适合

为了找到一个合适的,即低交叉验证损失的,设置选项使用贝叶斯优化。使用相同的交叉验证分区c在所有优化中。

为了再现性,使用“expected-improvement-plus”采集功能。

选择=结构(“优化”“bayesopt”'showplots',真的,“CVPartition”c...“AcquisitionFunctionName”“expected-improvement-plus”);svmmod = fitcsvm (grp cdata,“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。06946 | 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 |

图中包含一个坐标轴。标题为“最小目标vs.函数计算数”的轴包含2个类型为line的对象。这些对象代表最小观测目标、最小估计目标。

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

__________________________________________________________ 优化完成。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 chractoryName:'y'类分类:[] classNames:[-1 1] scoreTransform:'none'numobservations:200 hyperameteroptimizationresults:[1x1 bayesianoptimizationResults:[77x1 double]偏见:-0.2352内核参数:[1x1 struct] boxconstraints:[200x1双] ConvergenceInfo:[1x1 struct] issupportV万博1manbetxector:[200x1逻辑]求解器:'smo'属性,方法

找出优化模型的损失。

lossnew = kfoldLoss (fitcsvm (grp cdata,“CVPartition”c“KernelFunction”“rbf”...“BoxConstraint”svmmod.HyperparameterOptimizationResults.XAtMinObjective.BoxConstraint,...“KernelScale”, svmmod.HyperparameterOptimizationResults.XAtMinObjective.KernelScale))
lossnew = 0.0650

该损失与“观察到的目标函数值”下优化输出中报告的损失相同。

可视化优化的分类器。

d = 0.02;[x1grid,x2grid] = meshgrid(min(cdata(:,1)):d:max(cdata(:,1)),...分钟(cdata (:, 2)): d:马克斯(cdata (:, 2)));xGrid = [x1Grid (:), x2Grid (:));[~,分数]=预测(svmmod xGrid);图;h =南(3,1);%预先配置h (1:2) = gscatter (cdata (: 1), cdata (:, 2), grp,“rg”' + *’);持有h(3) =情节(cdata (svmmod.IsSu万博1manbetxpportVector, 1),...cdata (svmmod.I万博1manbetxsSupportVector, 2),“柯”);轮廓(x1Grid x2Grid,重塑(分数(:,2),大小(x1Grid)), [0 0),“k”);传奇(h, {' 1 '“+ 1”“万博1manbetx支持向量”},'地点'“东南”);轴平等的持有离开

图中包含一个坐标轴。轴包含线条、轮廓等4个对象。这些对象代表-1,+1,支持向量。万博1manbetx

绘制SVM分类模型的后验概率区域

这个例子展示了如何在观察网格上预测支持向量机模型的后验概率,然后在网格上绘制后验概率。绘制后验概率揭示了决策边界。

装载Fisher的Iris数据集。使用花瓣长度和宽度列出分类器,并从数据中删除Virginica物种。

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

使用这些数据训练一个支持向量机分类器。最好的做法是指定类的顺序。

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

估计最优分数变换函数。

rng (1);%的再现性[SVMModel, ScoreParameters] = fitPosterior (SVMModel);
警告:类是完全分离的。最优积分后验变换是一个阶跃函数。
ScoreParameters
记分节目=结构体字段:类型:'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] =预测(SVMModel [x1Grid (:), x2Grid (:)));

绘制正类后验概率区域和训练数据。

图;contourf (x1Grid x2Grid,...REPAPE(posteriorregion(:,2),尺寸(x1grid,1),尺寸(x1grid,2)));h =彩色杆;H.Label.String =.“P({\{杂色的}})';h.YLabel.FontSize = 16;caxis ([0 1]);colormap飞机;持有gscatter (X (: 1) X (:, 2), y,“mc”'。X'10],[15日);sv = X (SVMModel.I万博1manbetxsSupportVector:);情节(sv (: 1), sv (:, 2),“哟”'Markersize'15岁的“线宽”2);轴持有离开

图中包含一个坐标轴。轴包含等高线、直线等4个对象。这些物体代表着花斑。

在两类学习中,如果类是可分离的,则有三个区域:一个区域观察到的类后验概率为正0一个在那里1另一种是正类先验概率。

使用线性支持向量机分析图像万博1manbetx

该示例示出了如何通过培训由线性SVM二进制学习者组成的纠错输出代码(ECOC)模型来确定形状的哪个象限占用。此示例还说明了存储支持向量,其标签和估计的ECOC模型的磁盘空间消耗万博1manbetx α 系数。

创建数据集

在一张50 × 50的图片中随机放置一个半径为5的圆。5000张图片。为每个图像创建一个标签,指示圆所占据的象限。象限1在右上方,象限2在左上方,象限3在左下方,象限4在右下方。预测因子是每个像素的强度。

d = 50;%图像的高度和宽度,以像素为单位n = 5e4;%样本大小X = 0 (n、d ^ 2);预测器矩阵预分配y =零(n,1);%标签预先配置θ= 0:(1 / d):(2 *π);r = 5;%圆半径rng (1);%的再现性J = 1:n = 0;%空图像C = datasample((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 (:);%存储数据Y (j) = (c(2) > =地板(d / 2) + 2 * (c(2) <地板(d / 2)) +...(c(1) <下限(d/2)) +...if (((c(1) > ref (c(1), 1)) and (c(2) > ref (c(1), 1))), colorff00ff;确定象限结束

情节一个观察。

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

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

训练ecoc模型

使用25%的抵抗样本,并指定训练和抵抗样本指数。

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

创建一个支持向量机模板,指定存储二进制学习器的支持向量。万博1manbetx把它和训练数据传给fitcecoc训练模型。确定训练样本分类误差。

t = templateSVM (“Save万博1manbetxSupportVectors”,真正的);MdlSV = fitcecoc (X (isIdx:), Y (isIdx),“学习者”t);isLoss = resubLoss (MdlSV)
isLoss = 0

MdlSV是一个培训ClassificationECOC多级模型。它存储每个二进制学习者的训练数据和支持向量。万博1manbetx对于大型数据集,例如图像分析中的数据集,该模型可能会消耗大量内存。

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

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

该模型消耗763.6 MB。

提高模型效率

您可以评估采样的性能。您还可以评估该模型是否已过度装备,该模型不包含支持向量,其相关参数和培训数据。万博1manbetx

从培训的ECOC模型中丢万博1manbetx弃支持向量和相关参数。然后,通过使用丢弃来自生成的模型的培训数据紧凑的

Mdl = discard万博1manbetxSupportVectors (MdlSV);CMdl =紧凑(Mdl);信息=谁(“Mdl”“CMdl”);[bytesCMdl, bytesMdl] = info.bytes;/infoMdlSV.bytes . memReduction = 1 - [bytesMdl bytesCMdl]/infoMdlSV.bytes . memReduction = 1 - [bytesMdl bytesCMdl
memReduction =1×20.0626 - 0.9996

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

管理支持向量的另一种方法是在训练期间通过指定更大的框限制(万博1manbetx如100)来减少它们的数量。尽管使用较少支持向量的支持向量机模型更可取,占用的内存更少,但增加万博1manbetx框约束的值往往会增加训练时间。

删除MdlSVMDL.从工作空间。

清晰的MDL.MdlSV

评估样品的表现

计算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)

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

该模型不会错误分类任何阻滞样本观察。

另请参阅

||

相关话题

参考文献

Hastie, T., R. Tibshirani, J. Friedman。统计学习的要素, 第二版。纽约:斯普林斯,2008年。

[2] Christianini,N.和J. Shawe-Taylor。支持向量机和其他基于核的学习方法简介万博1manbetx.英国剑桥:剑桥大学出版社,2000年。

[3]球迷,R.-E。,林志信。陈,C.-J。林。使用二阶信息进行训练支持向量机的工作集选择万博1manbetx机器学习研究杂志, 2005年第6卷,1889-1918页。

凯克曼V., T. -M。和M. Vogt。从大数据集训练核机的迭代单数据算法:理论与性能在万博1manbetx支持向量机:理论与应用.王力波主编,255-274。柏林:斯普林格出版社,2005年版。