主要内容

优化分类器使用Bayesian Optimization

此示例显示了如何使用该示例优化SVM分类fitcsvm函数和OptimizeHyperparameters名称值参数。

生成数据

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

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

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

图中包含一个轴对象。轴对象包含两个类型为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),“罗”)举行离开

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

准备分类数据

将数据放入一个矩阵,并生成一个向量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 | Eval客观客观| | | BestSoFar | BestSoFar | BoxConstraint | KernelScale | | |结果| | |运行时(观察)| (estim) | | ||=====================================================================================================| | 最好1 | | 0.345 | 0.29522 | 0.345 | 0.345 | 0.00474 | 306.44 | | 2 |最好| 0.115 | 0.18714 | 0.115 | 0.12678 | 430.31 | 1.4864 | | 3 |接受| 0.52 | 0.27751 | 0.115 | 0.1152 | 0.028415 | 0.014369 | | 4 |接受| 0.61 | 0.297 | 0.115 |0.11504 | 133.94 | 0.0031427 | | 5 |接受| 0.34 | 0.40509 | 0.115 | 0.11504 | 0.010993 | 5.7742 | | 6 |最好| 0.085 | 0.2515 | 0.085 | 0.085039 | 885.63 | 0.68403 | | | 7日接受| 0.105 | 0.25066 | 0.085 | 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.085 |0.08725 | 972.19 | 0.46259 | | 10 | Accept | 0.1 | 0.42455 | 0.085 | 0.090952 | 990.29 | 0.491 | | 11 | Best | 0.08 | 0.35181 | 0.08 | 0.079362 | 2.5195 | 0.291 | | 12 | Accept | 0.09 | 0.2114 | 0.08 | 0.08402 | 14.338 | 0.44386 | | 13 | Accept | 0.1 | 0.20009 | 0.08 | 0.08508 | 0.0022577 | 0.23803 | | 14 | Accept | 0.11 | 0.49489 | 0.08 | 0.087378 | 0.2115 | 0.32109 | | 15 | Best | 0.07 | 0.29763 | 0.07 | 0.081507 | 910.2 | 0.25218 | | 16 | Best | 0.065 | 0.36104 | 0.065 | 0.072457 | 953.22 | 0.26253 | | 17 | Accept | 0.075 | 0.38855 | 0.065 | 0.072554 | 998.74 | 0.23087 | | 18 | Accept | 0.295 | 0.27085 | 0.065 | 0.072647 | 996.18 | 44.626 | | 19 | Accept | 0.07 | 0.31933 | 0.065 | 0.06946 | 985.37 | 0.27389 | | 20 | Accept | 0.165 | 0.27464 | 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.30824 | 0.065 | 0.071764 | 971.7 | 999.01 | | 22 | Accept | 0.61 | 0.26964 | 0.065 | 0.071967 | 0.0010168 | 0.0010005 | | 23 | Accept | 0.345 | 0.34764 | 0.065 | 0.071959 | 0.0011459 | 995.89 | | 24 | Accept | 0.35 | 0.22277 | 0.065 | 0.071863 | 0.0010003 | 40.628 | | 25 | Accept | 0.24 | 0.46237 | 0.065 | 0.072124 | 996.55 | 10.423 | | 26 | Accept | 0.61 | 0.48664 | 0.065 | 0.072067 | 994.71 | 0.0010063 | | 27 | Accept | 0.47 | 0.20158 | 0.065 | 0.07218 | 993.69 | 0.029723 | | 28 | Accept | 0.3 | 0.17353 | 0.065 | 0.072291 | 993.15 | 170.01 | | 29 | Accept | 0.16 | 0.41714 | 0.065 | 0.072103 | 992.81 | 3.8594 | | 30 | Accept | 0.365 | 0.42269 | 0.065 | 0.072112 | 0.0010017 | 0.044287 |

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

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

__________________________________________________________优化完成。MaxobjectiveEvaluative达到了30。总功能评估:全部经过30秒:42.6693秒总目标函数评估时间:9.3728最佳观察到的可行点:BoxConstraint Kernelscale ________________________ 953.22 0.26253观察到的目标函数值= 0.073726函数评估时间= 0.36104最佳估计可行点= 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使用最佳估计可行点的模型对象。最佳估计的可行点是基于贝叶斯优化过程的底层高斯过程模型,最小化交叉验证损失的上置信度最小的偏置率。

贝叶斯优化过程内部维护了客观函数的高斯过程模型。目标函数是分类的交叉验证错误分类率。对于每次迭代,优化过程更新高斯进程模型,并使用模型来查找新的HyperParameter集。迭代显示的每一行都显示了新的HyperParametes和这些列值:

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

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

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

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

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

迭代显示屏下方的曲线显示了Bestsofar(观察)Bestsofar(估计)值分别为蓝色和绿色。

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

你可以获得最好的点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
CriterionValue = 0.0888
迭代= 19.

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

l_minestimated = kfoldloss(fitcsvm(cdata,grp,'cvpartition',C,'骨箱'“rbf”...“BoxConstraint”x。BoxConstraint,“KernelScale”, 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:max(cdata(:,1)),...min(cdata(:,2)):d:max(cdata(:,2)));xgrid = [x1grid(:),x2grid(:)];[〜,得分] =预测(MDL,XGRID);图H(1:2)= G箭头(CDATA(:,1),CDATA(:,2),GRP,'rg''+ *');抓住h(3) =情节(cdata (Mdl.IsSu金宝apppportVector, 1),...cdata(mdl.is金宝appsupportvector,2),“柯”);轮廓(x1Grid x2Grid,重塑(分数(:,2),大小(x1Grid)), [0 0),'k');传奇(H,{'-1'“+ 1”'金宝app支持vectors'},“位置”“东南”);

图中包含一个轴对象。轴对象包含线条、轮廓等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);%绿色= 1grpdata(11:20)= -1;% red = -1v =预测(MDL,NewData);

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

l_test =损失(mdl,newdata,grpdata)
L_Test = 0.3500

确定正确分类的新数据点。格式化红色正方形的正确分类点和黑色方块中的错误分类点。

h(4:5)= g箭偶(newdata(:,1),newdata(:,2),v,“mc”'**');mydiff = (v == grpData);%分类正确II = mydiff.%在正确的点周围绘制红色方块h(6) =情节(newData (ii, 1), newData (ii, 2),“rs”“MarkerSize”12);结束II =不是(mydiff)%在错误点周围绘制黑色方块h(7) =情节(newData (ii, 1), newData (ii, 2),“ks”“MarkerSize”12);结束传奇(H,{“1”(培训)“+ 1(培训)”'金宝app支持vectors'...“1”(分类)“+ 1(分类)”...正确分类的'错误分类'},...“位置”“东南”);抓住离开

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

另请参阅

|

相关的话题