主要内容

优化交叉验证分类器的使用bayesopt

方法优化支持向量机分类bayesopt函数。

方法也可以优化分类器OptimizeHyperparameters名称-值参数。示例请参见使用贝叶斯优化优化分类器拟合

生成数据

分类工作在点的位置从高斯混合模型。在统计学习的要素, Hastie, Tibshirani和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)、眼睛(2),10);redpop = mvnrnd([0, 1],眼(2),10);

查看基点。

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

图中包含一个axes对象。坐标轴对象包含两个line类型的对象。

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

生成每个类的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),“去”)举行情节(redpts (: 1) redpts (:, 2),“罗”)举行

图中包含一个axes对象。坐标轴对象包含两个line类型的对象。

为分类准备数据

把数据放到一个矩阵里,就得到一个向量grp它标记了每个点的类。1表示绿色类,-1表示红色类。

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

准备交叉验证

为交叉验证设置一个分区。此步骤固定优化在每个步骤中使用的训练集和测试集。

c = cvpartition (200“KFold”10);

为贝叶斯优化准备变量

设置一个接受输入的函数z = [rbf_sigma boxconstraint]的交叉验证损失值z.取的分量z作为正的,对数变换的变量1 e-5而且1 e5.选择一个广泛的范围,因为你不知道哪些值可能是好的。

σ= optimizableVariable (“σ”(1 e-5, 1 e5),“转换”“日志”);盒= optimizableVariable (“盒子”(1 e-5, 1 e5),“转换”“日志”);

目标函数

这个函数句柄计算在参数处的交叉验证损失(σ,盒子).有关详细信息,请参见kfoldLoss

bayesopt通过变量z将目标函数作为单行表。

minfn = @ (z) kfoldLoss (fitcsvm (grp cdata,“CVPartition”c...“KernelFunction”“rbf”“BoxConstraint”z.box,...“KernelScale”z.sigma));

优化分类器

寻找最佳参数(σ,盒子)使用bayesopt.对于再现性,请选择“expected-improvement-plus”采集功能。默认的采集函数取决于运行时,因此可以给出不同的结果。

结果= bayesopt (minfn,σ,盒子,“IsObjectiveDeterministic”,真的,...“AcquisitionFunctionName”“expected-improvement-plus”
|=====================================================================================================| | Iter | Eval客观客观| | | BestSoFar | BestSoFar |σ盒| | | | |结果运行时| | | (estim(观察) .) | | | |=====================================================================================================| | 最好1 | | 0.61 | 0.20927 | 0.61 | 0.61 | 0.00013375 | 13929 | | 2 |最好| 0.345 | 0.098472 | 0.345 | 0.345 | 24526 | 1.936 | | 3 |接受| 0.61 | 0.14089 |0.345 | 0.345 | 0.0026459 | 0.00084929 | | 4 |接受| 0.345 | 0.24847 | 0.345 | 0.345 | 3506.3 | 6.7427 e-05 | | 5 |接受| 0.345 | 0.20974 | 0.345 | 0.345 | 9135.2 | 571.87 | | 6 |接受| 0.345 | 0.21647 | 0.345 | 0.345 | 99701 | 10223 | | 7最好| | 0.295 | 0.19945 | 0.295 | 0.295 | 455.88 | 9957.4 | | 8最好| | 0.24 | 0.96289 | 0.24 | 0.24 | 31.56 | 99389 | | | 9日接受| 0.24 | 1.2554 | 0.24 | 0.24 | 10.451 | 64429 | | 10 |接受| 0.35 | 0.21298 | 0.24 | 0.24 | 17.331 | 1.0264 e-05 |最好11 | | | 0.23 | 0.87151 | 0.23 | 0.23 | 16.005 | 90155 | | 12最好| | 0.1 | 0.23447 | 0.1 | 0.1 | 0.36562 | 80878 | | | 13日接受| 0.115 | 0.19081 | 0.1 | 0.1 | 0.1793 | 68459 | | | 14日接受| 0.105 | 0.30429 | 0.1 | 0.1 | 0.2267 | 95421 | |最好15 | | 0.095 | 0.14948 | 0.095 | 0.095 | 0.28999 | 0.0058227 | | 16最好| | 0.075 | 0.25525 | 0.075 | 0.075 | 0.30554 | 8.9017 | | | 17日接受| 0.085 | 0.22912 | 0.075 | 0.075 | 0.41122 | 4.4476 | | | 18日接受| 0.085 | 0.2578 | 0.075 | 0.075|0.25565 | 7.8038 | | 19 | Accept | 0.075 | 0.2328 | 0.075 | 0.075 | 0.32869 | 18.076 | | 20 | Accept | 0.085 | 0.16727 | 0.075 | 0.075 | 0.32442 | 5.2118 | |=====================================================================================================| | Iter | Eval | Objective | Objective | BestSoFar | BestSoFar | sigma | box | | | result | | runtime | (observed) | (estim.) | | | |=====================================================================================================| | 21 | Accept | 0.3 | 0.16719 | 0.075 | 0.075 | 1.3592 | 0.0098067 | | 22 | Accept | 0.12 | 0.20921 | 0.075 | 0.075 | 0.17515 | 0.00070913 | | 23 | Accept | 0.175 | 0.26044 | 0.075 | 0.075 | 0.1252 | 0.010749 | | 24 | Accept | 0.105 | 0.24597 | 0.075 | 0.075 | 1.1664 | 31.13 | | 25 | Accept | 0.1 | 0.19861 | 0.075 | 0.075 | 0.57465 | 2013.8 | | 26 | Accept | 0.12 | 0.16175 | 0.075 | 0.075 | 0.42922 | 1.1602e-05 | | 27 | Accept | 0.12 | 0.17382 | 0.075 | 0.075 | 0.42956 | 0.00027218 | | 28 | Accept | 0.095 | 0.16979 | 0.075 | 0.075 | 0.4806 | 13.452 | | 29 | Accept | 0.105 | 0.21391 | 0.075 | 0.075 | 0.19755 | 943.87 | | 30 | Accept | 0.205 | 0.19205 | 0.075 | 0.075 | 3.5051 | 93.492 |

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

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

__________________________________________________________ 优化完成。最大目标:达到30。总功能评估:30总运行时间:31.3766秒总目标功能评估时间:8.6396最佳观测可行点:西格玛盒子_______ ______ 0.30554 8.9017观测目标函数值= 0.075估计目标函数值= 0.075函数评估时间= 0.25525最佳估计可行点(根据模型):西格玛盒子_______ ______ 0.32869 18.076估计目标函数值= 0.075估计功能评估时间= 0.21907
results = BayesianOptimization with properties: ObjectiveFcn: [function_handle] variabledescription: [1x2 optimizableVariable] Options: [1x1 struct] MinObjective: 0.0750 XAtMinObjective: [1x2 table] minestimatedobjobjective: [1x2 table] numobjectiveevaluationevaluyjects: 30 TotalElapsedTime: 31.3766 NextPoint: [1x2 table] XTrace: [30x2 table] ObjectiveTrace: [30x1 double] ConstraintsTrace: [] UserDataTrace: {30x1 cell} ObjectiveEvaluationTimeTrace:[30x1 double] IterationTimeTrace: [30x1 double] ErrorTrace: [30x1 double]可行性追踪:[30x1 logical]可行性概率追踪:[30x1 double] IndexOfMinimumTrace: [30x1 double] objectivminimumtrace: [30x1 double] estimatedobjectivminimumtrace: [30x1 double]

求出最佳可行点的估计XAtMinEstimatedObjective属性或使用bestPoint函数。默认情况下,bestPoint函数使用“min-visited-upper-confidence-interval”标准。详细信息请参见标准名称-值参数bestPoint

结果。XAtMinEstimatedObjective
ans =1×2表西格玛盒子_______ ______ 0.32869 18.076
z = bestPoint(结果)
z =1×2表西格玛盒子_______ ______ 0.32869 18.076

使用最佳点来训练一个新的、优化的SVM分类器。

SVMModel = fitcsvm (grp cdata,“KernelFunction”“rbf”...“KernelScale”z.sigma,“BoxConstraint”, z.box);

要可视化支持向量分类器,可以在网格上预测分数。

d = 0.02;[x1Grid, x2Grid] = meshgrid (min (cdata (: 1)): d:马克斯(cdata (: 1)),...分钟(cdata (:, 2)): d:马克斯(cdata (:, 2)));xGrid = [x1Grid (:), x2Grid (:));[~,分数]=预测(SVMModel xGrid);

绘制分类边界。

图h (1:2) = gscatter (cdata (: 1), cdata (:, 2), grp,“rg”' + *’);持有h(3) = plot(cdata(svm . issupportvector,1),...cdata (SVMModel.IsSupportVector, 2),“柯”);轮廓(x1Grid x2Grid,重塑(分数(:,2),大小(x1Grid)), [0 0),“k”);传奇(h, {' 1 '“+ 1”“支持向量”},“位置”“东南”);

图中包含一个axes对象。坐标轴对象包含4个对象,类型为直线、轮廓。这些对象表示-1,+1,支持向量。

评估新数据的准确性

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

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 =预测(SVMModel newData);

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

L =损失(SVMModel newData grpData)
L = 0.3500

看看哪些新数据点被正确分类了。把分类正确的点圈成红色,把分类错误的点圈成黑色。

h (4:5) = gscatter (newData (: 1), newData (:, 2), v,“mc”“* *”);mydiff = (v == grpData);%分类正确2 = 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(培训)”“支持向量”...“1”(分类)“+ 1(分类)”...正确分类的“是不是”},...“位置”“东南”);持有

图中包含一个axes对象。axis对象包含8个类型为line、contour的对象。这些对象表示-1(训练),+1(训练),支持向量,-1(已分类),+1(已分类),正确分类,错误分类。

另请参阅

|

相关的话题

Baidu
map