主要内容

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

理解支持向量机金宝app

分离数据

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

金宝app支持向量是离分离超平面最近的数据点;这些点都在板的边界上。下图说明了这些定义,+表示类型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.

支持向量金宝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可以使用软边,这意味着一个分离了许多但不是所有数据点的超平面。

软利润率有两种标准公式,都涉及添加松弛变量ξ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,对应于支持向量。金宝app

你可以写出并解出它的对偶l2-范数问题。详情请参见克里斯蒂安尼尼和肖-泰勒[2]第六章。

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).

      请注意

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

使用支持向量金宝app机

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

训练SVM分类器

使用fitcsvm.最常见的语法是:

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

输入:

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

  • Y—类标签的数组,每行对应于in中相应行的值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”“内核尺度”“PolynomialOrder”,“标准化”.例如,请参见使用贝叶斯优化优化分类器.或者,您可以使用bayesopt函数,如使用bayesopt优化交叉验证分类器.的bayesopt功能允许更灵活的自定义优化。你可以使用bayesopt函数可优化任何参数,包括使用fitcsvm函数。

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

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

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

  3. 通过交叉验证的支持向量机模型kfoldLoss估计并保留分类误差。

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

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

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

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

      2. 作为原内核的新尺度因子。例如,乘ks通过11个值1e-51 e5,增长了10倍。

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

使用高斯核训练SVM分类器

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

生成100个均匀分布在单位磁盘上的点。为此,请生成一个半径r作为均匀随机变量的平方根,生成一个角度t在(0, 2 π ),并将矛头指向(rcos (t),r罪(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)、data2 (:, 2),“b”。“MarkerSize”15) ezpolar (@ (x) 1); ezpolar (@ (x) 2);轴相同的持有

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

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

数据3=[data1;data2];类=一(200,1);类(1:100)=-1;

用遗传算法训练支持向量机分类器KernelFunction设置为“rbf”BoxConstraint设置为.绘制决策边界并标记支持向量。金宝app

%训练支持向量机分类器cl=fitcsvm(数据3,类,“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)=绘图(数据3(第1类发布端口向量,1)金宝app,数据3(第2类发布端口向量),“柯”);轮廓(x1Grid x2Grid,重塑(分数(:,2),大小(x1Grid)), [0 0),“k”);传奇(h, {' 1 '“+ 1”“金宝app支持向量”}); 轴相同的持有

图中包含一个轴对象。轴对象包含字体线、文字、轮廓等6个对象。这些对象代表-1,+1,支持向量。金宝app

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

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

cl2=fitcsvm(数据3,类,“KernelFunction”“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),“柯”);轮廓(x1Grid x2Grid,重塑(scores2(:, 2),大小(x1Grid)), [0 0),“k”);传奇(h, {' 1 '“+ 1”“金宝app支持向量”}); 轴相同的持有

图中包含一个轴对象。轴对象包含字体线、文字、轮廓等6个对象。这些对象代表-1,+1,支持向量。金宝app

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

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

在单位圆内生成一组随机点。在第一和第三象限的标记点属于正类,而在第二和第四象限的标记点属于负类。

rng (1);%的再现性n = 100;%每象限的点数r1=sqrt(rand(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 = 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®路径上。

利用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] =预测(Mdl1 xGrid);%的分数图;h (1:2) = gscatter (X (: 1), (:, 2), Y);持有h(3) =情节(X (Mdl1.IsSu金宝apppportVector, 1),...X (Mdl1.I金宝appsSupportVector, 2),“柯”“MarkerSize”10);%的金宝app支持向量轮廓(x1Grid x2Grid,重塑(scores1(:, 2),大小(x1Grid)), [0 0),“k”);%的决策边界标题(“带有决策边界的散点图”)({传奇' 1 '' 1 '“金宝app支持向量”},“位置”“最佳”);持有

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

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

CVMdl1=交叉值(Mdl1);错误分类1=kfoldLoss(CVMdl1);错误分类1
错误分类1=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金宝apppportVector, 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

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

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

这个例子展示了如何优化SVM分类使用fitcsvm函数和OptimizeHyperparameters名称-值参数。

生成数据

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

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

  2. 生成一个具有二维正态分布均值的独立随机点方差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),“罗”)举行

图中包含一个轴对象。轴对象包含两个类型为line的对象。

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

生成每个类的100个数据点。

redpts = 0 (100 2);grnpts = redpts;i=1:100 GRNPT(i,:)=mvnrnd(grnpop(randi(10),:),eye(2)*0.02);redpts(i,:)=mvnrnd(redpop(randi(10),:),eye(2)*0.02);结束

查看数据点。

图绘制(grnpts (: 1), grnpts (:, 2),“去”)举行情节(redpts (: 1) redpts (:, 2),“罗”)举行

图中包含一个轴对象。轴对象包含两个类型为line的对象。

准备分类数据

将数据放入一个矩阵,并生成一个向量grp标记每个点的类别。1表示绿色类,-1表示红色类。

cdata = [grnpts; redpts];grp = 1 (200 1);grp (101:200) = 1;

准备交叉验证

为交叉验证设置分区。

c = cvpartition (200“KFold”10);

此步骤是可选的。如果为优化指定分区,则可以计算返回模型的实际交叉验证损失。

优化匹配

为了找到一个很好的匹配,即具有最优超参数的匹配,以最小化交叉验证损失,可以使用贝叶斯优化。属性指定要优化的超参数列表OptimizeHyperparameters参数,并通过使用HyperparameterOptimizationOptions名称-值参数。

具体说明“OptimizeHyperparameters”作为“汽车”.的“汽车”选项包括一组要优化的典型超参数。fitcsvm的最优值BoxConstraintKernelScale.设置超参数优化选项以使用交叉验证分区c选择“expected-improvement-plus”再现性的获取功能。默认的获取函数取决于运行时,因此可以给出不同的结果。

opts=struct(“CVPartition”c“AcquisitionFunctionName”“expected-improvement-plus”);Mdl = fitcsvm (grp cdata,“KernelFunction”“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|

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

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

__________________________________________________________ 优化完成。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]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'属性,方法

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

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

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

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

  • Eval结果—结果报告,指定为接受最好的错误接受表示目标函数返回一个有限值,并且错误指示目标函数返回一个非有限实标量的值。最好的指示目标函数返回一个比先前计算的目标函数值低的有限值。

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

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

迭代显示下面的图显示了BestSoFar(观察)BestSoFar (estim)。值分别以蓝色和绿色显示。

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

你可以从HyperparameterOptimizationResults属性或使用bestPoint函数。

Mdl.HyperparameterOptimizationResults.xatmineEstimatedObjective
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“KernelFunction”“rbf”...“BoxConstraint”x。BoxConstraint,“内核尺度”, x.KernelScale))
L_MinEstimated=0.0700

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

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

Mdl.HyperparameterOptimizationResults.XAtMinObjective
ans =1×2表BoxConstraint KernelScale  _____________ ___________ 953.22 - 0.26253
[x_观察到的,标准值_观察到的,迭代_观察到的]=最佳点(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.IsSu金宝apppportVector, 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 *眼(2));redobj = gmdistribution (redpop。2 *眼(2));newData =随机(grnobj 10);newData = [newData;随机(redobj 10)];grpData = 1(20日1);% green = 1grpData (11) = 1;% red = -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);%正确分类2 = mydiff%在正确的点周围绘制红色方块h(6)=绘图(新数据(ii,1),新数据(ii,2),“rs”“MarkerSize”12);结束2 =不(mydiff)%在不正确的pts周围绘制黑色方框h(7) =情节(newData (ii, 1), newData (ii, 2),“ks”“MarkerSize”12);结束传奇(h, {“1”(培训)“+ 1(培训)”“金宝app支持向量”...“-1(已分类)”“+1(已分类)”...“正确分类”“是不是”},...“位置”“东南”);持有

图中包含一个轴对象。轴对象包含线型、等高线等8个对象。这些对象代表-1(训练),+1(训练),支持向量,-1(分类),+1(分类),正确分类,错误分类。金宝app

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

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

载入费雪的虹膜数据集。使用花瓣的长度和宽度训练分类器,并从数据中去除弗吉尼亚的物种。

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

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

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

估计最优分数变换函数。

rng (1);%的再现性[SVMModel, ScoreParameters] = fitPosterior (SVMModel);
警告:类是完全分离的。最优积分后验变换是一个阶跃函数。
计分参数
计分参数=结构体字段:类型:“阶跃”下限:-0.8431上限:0.6897正定通过概率:0.5000

最优分数变换函数是阶跃函数,因为类是可分离的。的字段下界UpperBound计分参数指示与类分离超平面内的观察值相对应的分数区间的上下端点(边缘)。任何训练观察都不在范围内。如果一个新的分数在这个区间内,则软件将相应的观察值赋给一个正的类别后验概率,即PositiveClassProbability领域的计分参数

在观测的预测器空间中定义一个网格值。预测网格中每个实例的后验概率。

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,...重塑(后验区域(:,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.I金宝appsSupportVector:);情节(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=零(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)) +...2*((c(1)>=楼层(d/2))和(c(2)<楼层(d/2));确定象限结束

情节一个观察。

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

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

培训ECOC模式

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

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

创建一个支持向量机模板,指定存储二进制学习器的支持向量。金宝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;/infoMdlSV.bytes . memReduction = 1 - [bytesMdl bytesCMdl]/infoMdlSV.bytes . memReduction = 1 - [bytesMdl bytesCMdl
膜还原=1×20.0626 - 0.9996

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

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

删除MdlSVMdl从工作区。

清晰的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)

图中包含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包含2个类型为图像、文本的对象。

该模型不会对任何保持样本观测值进行错误分类。

另请参阅

||

相关的话题

参考文献

[1] 黑斯蒂、T、R.蒂布什拉尼和J.弗里德曼。统计学习的要素,第二版。纽约:斯普林格,2008年。

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

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

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