优化交叉验证分类器的使用bayesopt
方法优化支持向量机分类bayesopt
函数。
属性对分类器进行优化OptimizeHyperparameters
名称-值参数。有关示例,请参见使用贝叶斯优化优化分类器拟合.
生成数据
分类工作的点的位置从高斯混合模型。在统计学习的要素, Hastie, Tibshirani, and Friedman(2009),第17页描述了该模型。该模型首先为“绿色”类生成10个基点,分布为均值(1,0)和单位方差的二维独立法线。它还为“红色”类生成10个基点,分布为均值(0,1)和单位方差的二维独立法线。对于每个类别(绿色和红色),生成100个随机点,如下所示:
选择一个基准点米随机均匀地涂上适当的颜色。
生成具有均值的二维正态分布的独立随机点米和方差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),“罗”)举行从
由于一些红色基点接近绿色基点,因此仅根据位置很难对数据点进行分类。
生成每个类的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),“罗”)举行从
为分类准备数据
把数据放到一个矩阵中,然后做一个向量grp
标记每个点的类。1表示绿色类,-1表示红色类。
Cdata = [grnpts;redpts];GRP = ones(200,1);Grp (101:200) = -1;
准备交叉验证
为交叉验证设置一个分区。这个步骤固定了优化在每个步骤中使用的训练和测试集。
C = cvpartition(200,“KFold”10);
为贝叶斯优化准备变量
设置一个接受输入的函数Z = [rbf_sigma,boxconstraint]
的交叉验证损失值z
.取z
作为正的,之间的对数变换变量1 e-5
而且1 e5
.选择一个较大的范围,因为您不知道哪些值可能是好的。
sigma = optimizableVariable(“σ”(1 e-5, 1 e5),“转换”,“日志”);box = optimizableVariable(“盒子”(1 e-5, 1 e5),“转换”,“日志”);
目标函数
这个函数句柄计算参数的交叉验证损失(σ,盒子)
.详细信息请参见kfoldLoss
.
bayesopt
传递变量z
将目标函数作为单行表。
minfn = @(z)kfoldLoss(fitcsvm(cdata,grp,“CVPartition”c...“KernelFunction”,“rbf”,“BoxConstraint”z.box,...“KernelScale”z.sigma));
优化分类器
寻找最佳参数(σ,盒子)
使用bayesopt
.为了重现性,选择“expected-improvement-plus”
采集功能。默认的采集函数取决于运行时,因此可以给出不同的结果。
结果= bayesopt(minfn,[sigma,box],“IsObjectiveDeterministic”,真的,...“AcquisitionFunctionName”,“expected-improvement-plus”)
|=====================================================================================================| | Iter | Eval客观客观| | | BestSoFar | BestSoFar |σ盒| | | | |结果运行时| | | (estim(观察) .) | | | |=====================================================================================================| | 最好1 | | 0.61 | 0.24537 | 0.61 | 0.61 | 0.00013375 | 13929 | | 2 |最好| 0.345 | 0.12815 | 0.345 | 0.345 | 24526 | 1.936 | | 3 |接受| 0.61 | 0.24772 |0.345 | 0.345 | 0.0026459 | 0.00084929 | | 4 |接受| 0.345 | 0.63643 | 0.345 | 0.345 | 3506.3 | 6.7427 e-05 | | 5 |接受| 0.345 | 0.44655 | 0.345 | 0.345 | 9135.2 | 571.87 | | 6 |接受| 0.345 | 0.29763 | 0.345 | 0.345 | 99701 | 10223 | | 7最好| | 0.295 | 0.28926 | 0.295 | 0.295 | 455.88 | 9957.4 | | 8最好| | 0.24 | 1.0736 | 0.24 | 0.24 | 31.56 | 99389 | | | 9日接受| 0.24 | 1.3253 | 0.24 | 0.24 | 10.451 | 64429 | | 10 |接受| 0.35 | 0.28726 | 0.24 | 0.24 | 17.331 | 1.0264 e-05 | |11 | Best | 0.23 | 0.84261 | 0.23 | 0.23 | 16.005 | 90155 | | 12 | Best | 0.1 | 0.33515 | 0.1 | 0.1 | 0.36562 | 80878 | | 13 | Accept | 0.115 | 0.20463 | 0.1 | 0.1 | 0.1793 | 68459 | | 14 | Accept | 0.105 | 0.39406 | 0.1 | 0.1 | 0.2267 | 95421 | | 15 | Best | 0.095 | 0.35611 | 0.095 | 0.095 | 0.28999 | 0.0058227 | | 16 | Best | 0.075 | 0.30829 | 0.075 | 0.075 | 0.30554 | 8.9017 | | 17 | Accept | 0.085 | 0.42445 | 0.075 | 0.075 | 0.41122 | 4.4476 | | 18 | Accept | 0.085 | 0.31873 | 0.075 | 0.075 | 0.25565 | 7.8038 | | 19 | Accept | 0.075 | 0.28976 | 0.075 | 0.075 | 0.32869 | 18.076 | | 20 | Accept | 0.085 | 0.2433 | 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.17145 | 0.075 | 0.075 | 1.3592 | 0.0098067 | | 22 | Accept | 0.12 | 0.21489 | 0.075 | 0.075 | 0.17515 | 0.00070913 | | 23 | Accept | 0.175 | 0.26082 | 0.075 | 0.075 | 0.1252 | 0.010749 | | 24 | Accept | 0.105 | 0.27043 | 0.075 | 0.075 | 1.1664 | 31.13 | | 25 | Accept | 0.1 | 0.21363 | 0.075 | 0.075 | 0.57465 | 2013.8 | | 26 | Accept | 0.12 | 0.21596 | 0.075 | 0.075 | 0.42922 | 1.1602e-05 | | 27 | Accept | 0.12 | 0.20252 | 0.075 | 0.075 | 0.42956 | 0.00027218 | | 28 | Accept | 0.095 | 0.23961 | 0.075 | 0.075 | 0.4806 | 13.452 | | 29 | Accept | 0.105 | 0.23872 | 0.075 | 0.075 | 0.19755 | 943.87 | | 30 | Accept | 0.205 | 0.1592 | 0.075 | 0.075 | 3.5051 | 93.492 |
__________________________________________________________ 优化完成。最大目标达到30个。总函数评估:30总运行时间:37.5921秒总目标函数评估时间:10.8816最佳观测可行点:西格玛箱_______ ______ 0.30554 8.9017观测目标函数值= 0.075估计目标函数值= 0.075函数评估时间= 0.30829最佳估计可行点(根据模型):西格玛箱_______ ______ 0.32869 18.076估计目标函数值= 0.075估计函数评估时间= 0.27755
results = BayesianOptimization with properties: ObjectiveFcn: [function_handle] variabledescription: [1x2 optimizableVariable] Options: [1x1 struct] MinObjective: 0.0750 XAtMinObjective: [1x2 table] minestimatedobjobjective: 0.0750 xatminestimatedobjobjective: [1x2 table] numobjectiveevaluveevaluation: 30 TotalElapsedTime: 37.5921 NextPoint: [1x2 table] XTrace: [30x2 table] ObjectiveTrace: [30x1 double] ConstraintsTrace: [] UserDataTrace: {30x1 cell} ObjectiveEvaluationTimeTrace:[30x1 double] IterationTimeTrace: [30x1 double] ErrorTrace: [30x1 double]可行性trace: [30x1 logical]可行性probabilitytrace: [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(cdata,grp,“KernelFunction”,“rbf”,...“KernelScale”z.sigma,“BoxConstraint”, z.box);
为了使支持向量分类器可视化,可以在金宝app网格上预测分数。
D = 0.02;[x1Grid, x2Grid] = meshgrid (min (cdata (: 1)): d:马克斯(cdata (: 1)),...分钟(cdata (:, 2)): d:马克斯(cdata (:, 2)));xGrid = [x1Grid(:),x2Grid(:)];[~,scores] = predict(SVMModel,xGrid);
画出分类边界。
图h (1:2) = gscatter (cdata (: 1), cdata (:, 2), grp,“rg”,' + *’);持有在h(3) = plot(cdata(SVMModel.Is金宝appSupportVector,1),...cdata (SVMModel.I金宝appsSupportVector, 2),“柯”);轮廓(x1Grid x2Grid,重塑(分数(:,2),大小(x1Grid)), [0 0),“k”);传奇(h, {' 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(SVMModel,newData);
计算测试数据集上的误分类率。
L = loss(SVMModel,newData,grpData)
L = 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(分类)”,...正确分类的,“是不是”},...“位置”,“东南”);持有从