主要内容

高数组的贝叶斯优化

此示例显示如何使用贝叶斯优化选择通过使用培训内核分类器的最佳参数“OptimizeHyperparameters”名称-值参数。样本数据集airlinesmall.csv是一个大型数据集,其中包含航空公司航班数据的表格文件。这个示例创建了一个包含数据的高表,并从高表中提取类标签和预测器数据来运行优化过程。

当您在高数组上执行计算时,MATLAB®使用一个并行池(如果您有parallel Computing Toolbox™,则默认)或本地MATLAB会话。如果您希望在拥有Parallel Computing Toolbox时使用本地MATLAB会话运行该示例,则可以通过使用mapreduce函数。

将数据导入MATLAB®

创建一个使用数据引用文件夹位置的数据存储。数据可以包含在单个文件、文件集合或整个文件夹中。对于包含文件集合的文件夹,您可以指定整个文件夹位置,或使用通配符,‘* . csv‘,包括在数据存储区中包含具有相同文件扩展名的多个文件。选择变量的子集以与其合作,并处理'NA'值丢失的数据,以便数据存储取代他们值。创建一个高表,其中包含数据存储中的数据。

ds =数据存储('airlinesmall.csv');ds。SelectedVariableNames = {“月”“DayofMonth”“DayOfWeek”...“DepTime”“ArrDelay”“距离”'depdelay'};ds.TreatAsMissing ='NA';tt =高(DS)%高表
开始使用“本地”轮廓平行池(parpool)......连接到并行池(工号:6)。TT = M×7高大表月DAYOFMONTH DAYOFWEEK DepTime ArrDelay距离DepDelay _____ __________ _________ _______ ________ ________ ________ 10 21 3 642 8 308 12 10 26 1 1021 8 296 1 10 23 5 2055 21 480 20 10 23 5 1332 13 296 12 1022 4 629 4 373 10 -1 28 3 1446 59 308 63 10 8 4 928 3 447 10 -2 10 6 859 11 954 -1::::::::::::::

准备类标签和预测器数据

通过定义一个对迟到航班适用的逻辑变量来确定迟到10分钟或更长时间的航班。这个变量包含类标签。这个变量的预览包括前几行。

y = tt.depdelay> 10%类标签
Y = M×1 tall logical array 1 0 1 1 0 1 0 0::

为预测器数据创建一个高数组。

X = tt {: 1: end-1}%的预测数据
X = 21米×6双矩阵10 3 642 8 308 10 26 1 1021 8 296 10 23 5 2055 21 480 10 23 5 1332 13 296 22 4 629 373 10 28 1446 59 308 859 4 928 3 447 10 10 6 11 954  : : : : : : : : : : : :

删除行中XY包含丢失的数据。

R = rmmissing([X Y]);删除了缺失条目的%数据X = R (:, 1: end-1);Y = R(:,结束);

执行贝叶斯优化使用优化hyperParameters.

使用该优化HyperParameters“OptimizeHyperparameters”名称-值参数。

标准化预测变量。

Z = zscore (X);

找到最优值'KernelScale''lambda'最小化拒绝验证集损失的名称-值参数。默认情况下,软件选择并保留20%的数据作为验证数据,并使用其余的数据训练模型。您可以通过使用“HyperparameterOptimizationOptions”名称-值参数。为了再现性,请使用“expected-improvement-plus”利用获取函数和设置种子的随机数生成器rng塔罗尔尔.该结果可能会因工人的数量和用于高阵列执行环境而变化。有关详细信息,请参阅控制代码运行的位置

rng (“默认”)Tallrng(“默认”)MDL = fitckernel(Z,Y,“放牧”,0,“OptimizeHyperparameters”“汽车”...“HyperparameterOptimizationOptions”结构(“AcquisitionFunctionName”“expected-improvement-plus”)))
使用Parallel Pool 'local'计算tall表达式:-通过第2步:在7.1秒内完成-通过第2步:在2.2秒内完成
使用并行池'local'计算tall表达式:在1.6秒完成评估在1.8秒完成  |=====================================================================================================| | Iter | Eval客观客观| | | BestSoFar | BestSoFar | KernelScaleλ| | | | |结果运行时| |(观察)| (estim) | | ||=====================================================================================================| | 最好1 | | 0.19672 | 125.49 | 0.19672 | 0.19672 | 1.2297 | 0.0080902 |
使用并行池'local'计算tall表达式:- Pass 1 of 1: Completed in 0.93 sec计算在1.1 sec完成| 2 |接受| 0.19672 | 53.653 | 0.19672 | 0.19672 | 0.039643 | 2.5756e-05 |
评估使用并行池“本地”高表达: - 的1遍1:在1.5秒评价完成在1.6秒完成了|3 |接受|0.19672 |52.453 |0.19672 |0.19672 |0.02562 |1.2555e-08 |
使用并行池“本地”评估高表达: -  PASS 1为1:在1.1秒评估中完成1.2秒|4 |接受|0.19672 |57.223 |0.19672 |0.19672 |92.644 |1.2056E-07 |
使用Parallel Pool 'local'评估tall表达式:- Pass 1 of 1: Completed in 1.4 sec Evaluation Completed in 1.5 sec | 5 | Best | 0.11469 | 89.981 | 0.11469 | 0.12698 | 11.173 | 0.00024836 |
使用Parallel Pool 'local'评估tall表达式:- Pass 1 of 1: Completed in 0.94 sec
使用Parallel Pool 'local'计算tall表达式:- Pass 1 of 1: Completed in 0.92 sec Evaluation Completed in 1.1 sec | 7 | Accept | 0.19672 | 50.604 | 0.11365 | 0.11373 | 0.0059498 | 0.00043861 |
使用并行池“本地”评估高表达: -  PASS 1为1:在0.89秒的评估中完成,在1秒内完成8 |接受|0.12122 |91.341 |0.11365 |0.11371 |11.44 |0.00045722 |
使用Parallel Pool 'local'计算tall表达式:- Pass 1 of 1: Completed in 0.97 sec
使用Parallel Pool 'local'计算tall表达式:- Pass 1 of 1: Completed in 0.87 sec计算1 sec完成| 10 |接受| 0.10433 | 42.215 | 0.10417 | 0.10417 | 9.6694 | 1.4948e-05 |
| 11 | Best | 0.10409 | 41.618 | 0.10409 | 0.10411 | 6.2099 | 6.1093e-06 |
| 12 | Best | 0.10383 | 44.635 | 0.10383 | 0.10404 | 5.6767 | 7.6134e-08 |
使用Parallel Pool 'local'计算tall表达式:- Pass 1 of 1: Completed in 0.89 sec计算在1 sec内完成| 13 | Accept | 0.10408 | 45.429 | 0.10383 | 0.10365 | 8.1769 | 8.5993e-09 |
使用Parallel Pool 'local'计算tall表达式:- Pass 1 of 1: Completed in 0.89 sec计算在1 sec完成| 14 |接受| 0.10404 | 41.928 | 0.10383 | 0.10361 | 7.6191 | 6.4079e-07 |
评估使用并行池“本地”高表达: - 的1遍1:在0.93秒评价完成在1.1秒完成|15 |最好的0.10351 |42.094 |0.10351 |0.10362 |4.2987 |9.2645e-08 |
使用并行池“本地”评估高表达: -  PASS 1为1:0.88秒评估完成1秒内完成16 |接受|0.10404 |44.684 |0.10351 |0.10362 |4.8747 |1.7838e-08 |
使用Parallel Pool 'local'计算tall表达式:- Pass 1 of 1: Completed in 0.87 sec Evaluation Completed in 0.87 sec | 17 | Accept | 0.10657 | 88.006 | 0.10351 | 0.10357 | 4.8239 | 0.00016344 |
使用并行池“本地”评估高表达: -  PASS 1为1:0.88秒评估完成1秒内完成18 |最好的0.10299 |41.303 |0.10299 |0.10358 |3.5555 |2.7165E-06 |
使用Parallel Pool 'local'计算tall表达式:- Pass 1 of 1: Completed in 0.89 sec计算在1 sec内完成| 19 |接受| 0.10366 | 41.301 | 0.10299 | 0.10324 | 3.8035 | 1.3542e-06 |
| 20 |接受| 0.10337 | 41.345 | 0.10299 | 0.10323 | 3.806 | 1.8101e-06 |
使用并行池“本地”评估高表达: -  PASS 1为1:在0.89秒的评估中完成,在1秒内完成=====================================================================================================| | Iter | Eval | Objective | Objective | BestSoFar | BestSoFar | KernelScale | Lambda | | | result | | runtime | (observed) | (estim.) | | | |=====================================================================================================| | 21 | Accept | 0.10345 | 41.418 | 0.10299 | 0.10322 | 3.3655 | 9.082e-09 |
使用Parallel Pool 'local'计算tall表达式:- Pass 1 of 1: Completed in 0.86 sec计算在0.98 sec完成| 22 |接受| 0.19672 | 60.129 | 0.10299 | 0.10322 | 999.62 | 1.2609e-06 |
使用并行池“本地”评估高表达: -  PASS 1为1:0.88秒评估完成1秒内完成23 |接受|0.10315 |41.133 |0.10299 |0.10306 |3.6716 |1.2445E-08 |
| 24 | Accept | 0.19672 | 48.262 | 0.10299 | 0.10306 | 0.0010004 | 2.6214e-08 |
使用并行池“本地”评估高表达: -  PASS 1为1:在0.89秒的评估中完成,在1秒内完成25 |接受|0.19672 |48.334 |0.10299 |0.10306 |0.21865 |0.0026529 |
使用Parallel Pool 'local'计算tall表达式:- Pass 1 of 1: Completed in 0.86 sec计算在0.98 sec完成| 26 |接受| 0.19672 | 60.229 | 0.10299 | 0.10306 | 299.92 | 0.0032109 |
使用Parallel Pool 'local'计算tall表达式:- Pass 1 of 1: Completed in 0.87 sec计算在0.99 sec完成| 27 | Accept | 0.19672 | 48.361 | 0.10299 | 0.10306 | 0.002436 | 0.0040428 |
使用Parallel Pool 'local'计算tall表达式:- Pass 1 of 1: Completed in 1.2 sec Evaluation Completed in 1.4 sec | 28 | Accept | 0.19672 | 52.539 | 0.10299 | 0.10305 | 0.50559 | 3.3667e-08 |
使用并行池“本地”评估高表达: -  PASS 1为1:0.88秒评估完成1秒内完成29 |接受|0.10354 |43.957 |0.10299 |0.10313 |3.7754 |9.5626e-09 |
使用Parallel Pool 'local'计算tall表达式:- Pass 1 of 1: Completed in 0.93 sec Evaluation Completed in 1.1 sec | 30 | Accept | 0.10405 | 41.388 | 0.10299 | 0.10315 | 8.9864 | 2.3136e-07 |

__________________________________________________________优化完成。MaxobjectiveEvaluations达到了30。总功能评价:30总的经过时间:1677.1387秒总目标函数评估时间:1645.7748最佳观察到的可行点:KernelScale LAMBDA ___________ __________ 3.5555 2.7165e-06观察到的目标函数值= 0.10299估计目标函数值= 0.10332函数求时间= 41.3029最佳估计可行点(根据型号):KENELSCALE LAMBDA ___________ __________ 3.6716 1.2445E-08估计目标函数值= 0.10315估计函数评估时间= 42.3461
Mdl = ClassificationKernel PredictorNames: {'x1' 'x2' 'x3' 'x4' 'x5' 'x6'} ResponseName: 'Y' ClassNames: [0 1] Learner: 'svm' NumExpansionDimensions: 256 KernelScale: 3.6716 Lambda: 1.2445e-08 BoxConstraint: 665.9442属性,方法

通过使用执行贝叶斯优化bayesopt

或者,您可以使用bayesopt功能找到HyperParameters的最佳值。

将数据集分为培训和测试集。为测试集指定1/3 HoldOut示例。

rng (“默认”%的再现性tallrng (“默认”%的再现性分区= cvpartition (Y,“坚持”,1/3);TrainingInds =培训(分区);对于训练集%指标testInds =测试(分区);测试集的%索引

提取训练和测试数据并标准化预测数据。

Ytrain = Y (trainingInds);%培训课程标签Xtrain = X (trainingInds:);[Ztrain,μ,stddev] = zscore (Xtrain);%标准化培训数据欧美= Y (testInds);%测试类标签Xtest = X (testInds:);中兴通讯= (Xtest-mu)。/ stddev;%标准化试验数据

定义变量σlambda.的最优值'KernelScale''lambda'名称-值参数。使用optimizableVariable并为变量指定一个较大的范围,因为最佳值是未知的。对变量应用对数变换,在对数尺度上寻找最优值。

n =聚集(numel(ytrain));%评估高训练数组在记忆中的长度
评估使用并行池“本地”高表达: - 通11:0%的完全的评价0%完成
- 第1条第1条:0.95秒评估完成91%完整

评估在1.1秒内完成
sigma =优化的不变性(“σ”(1 e - 3, 1 e3),“转换”“日志”);拉姆达= optimizableVariable(“拉姆达”[(1 e - 3) / N (1 e3) / N),“转换”“日志”);

创建贝叶斯优化目标函数。目标函数接受一个包含变量表σlambda.然后,然后计算使用培训的二进制高斯内核分类模型的分类损失值fitckernel函数。集“详细”,0之内fitckernel抑制诊断信息的迭代显示。

minfn = @ (z)收集(损失(fitckernel (Ztrain Ytrain,...'KernelScale'z.sigma,'lambda'z.lambda,“放牧”0),...ZTEST,YTEST));

优化的参数[SIGMA,λ1通过使用的分类损失的内核分类模型bayesopt.默认情况下,bayesopt在命令行显示关于优化的迭代信息。为了重现性,设置收集功能名称选项“expected-improvement-plus”.默认的获取函数取决于运行时,因此可以给出不同的结果。

结果= bayesopt (minfn(σ,λ),“AcquisitionFunctionName”“expected-improvement-plus”
使用并行池“本地”评估高表达: -  PASS 1为1:在1.1秒评估中完成,在1.3秒内完成=====================================================================================================| | Iter | Eval | Objective | Objective | BestSoFar | BestSoFar | sigma | lambda | | | result | | runtime | (observed) | (estim.) | | | |=====================================================================================================| | 1 | Best | 0.19651 | 84.526 | 0.19651 | 0.19651 | 1.2297 | 0.012135 |
使用并行池“本地”评估高表达: -  PASS 1为1:在1.1秒评估中完成1.2秒|2 |接受|0.19651 |112.57 |0.19651 |0.19651 |0.039643 |3.8633e-05 |
使用并行池'local'计算高表达式:- Pass 1 of 1: Completed in 1.1 sec计算在1.3 sec完成| 3 |接受| 0.19651 | 80.282 | 0.19651 | 0.19651 | 0.02562 | 1.8832e-08 |
使用并行池'local'计算高表达式:- Pass 1 of 1: Completed in 1.1 sec计算在1.3 sec完成| 4 |接受| 0.19651 | 52.306 | 0.19651 | 0.19651 | 92.644 | 1.8084e-07 |
使用并行池“本地”评估高表达: -  PASS 1为1:在1.1秒评估中完成1.2秒|5 |接受|0.19651 |52.717 |0.19651 |0.19651 |978.95 |0.00015066 |
使用Parallel Pool 'local'计算tall表达式:- Pass 1 of 1: Completed in 1.1 sec Evaluation Completed in 1.2 sec | 6 | Accept | 0.19651 | 90.336 | 0.19651 | 0.19651 | 0.0089609 | 0.0059189 |
使用Parallel Pool 'local'计算tall表达式:- Pass 1 of 1: Completed in 1.1 sec计算在1.2 sec完成| 7 |接受| 0.19651 | 110.35 | 0.19651 | 0.19651 | 0.0010228 | 1.292e-08 |
使用并行池“本地”评估高表达: -  PASS 1为1:在1.1秒评估中完成,在1.3秒内完成8 |接受|0.19651 |76.594 |0.19651 |0.19651 |0.27475 |0.0044831 |
使用Parallel Pool 'local'计算tall表达式:- Pass 1 of 1: Completed in 1.1 sec计算在1.2 sec完成| 9 |接受| 0.19651 | 77.641 | 0.19651 | 0.19651 | 0.81326 | 1.0753e-07 |
使用Parallel Pool 'local'计算tall表达式:- Pass 1 of 1: Completed in 1.1 sec Evaluation Completed in 1.2 sec | 10 | Accept | 0.19651 | 100.21 | 0.19651 | 0.19651 | 0.0040507 | 0.00011333 |
使用并行池'local'计算高表达式:- Pass 1 of 1: Completed in 1.1 sec计算在1.2 sec完成| 11 |接受| 0.19651 | 52.287 | 0.19651 | 0.19651 | 964.67 | 1.2786e-08 |
使用Parallel Pool 'local'计算tall表达式:- Pass 1 of 1: Completed in 1.1 sec Evaluation Completed in 1.2 sec | 12 | Accept | 0.19651 | 107.7 | 0.19651 | 0.19651 | 0.24069 | 0.0070503 |
使用并行池“本地”评估高表达: -  PASS 1为1:在1.1秒评估中完成1.2秒|13 |接受|0.19651 |52.092 |0.19651 |0.19651 |974.15 |0.010898 |
使用Parallel Pool 'local'计算tall表达式:- Pass 1 of 1: Completed in 1.1 sec Evaluation Completed in 1.3 sec | 14 | Accept | 0.19651 | 92.184 | 0.19651 | 0.19651 | 0.0013246 | 0.0011748 |
使用并行池'local'计算高表达式:- Pass 1 of 1: Completed in 1.1 sec计算在1.2 sec完成| 15 |接受| 0.19651 | 87.893 | 0.19651 | 0.19651 | 0.0067415 | 1.9074e-07 |
使用并行池'local'计算高表达式:- Pass 1 of 1: Completed in 1.1 sec计算在1.3 sec完成| 16 |接受| 0.19651 | 110.46 | 0.19651 | 0.19651 | 0.020448 | 1.247e-08 |
使用Parallel Pool 'local'计算tall表达式:- Pass 1 of 1: Completed in 1.1 sec Evaluation Completed in 1.2 sec | 17 | Accept | 0.19651 | 104.12 | 0.19651 | 0.19651 | 0.0016556 | 0.0001784 |
使用Parallel Pool 'local'计算tall表达式:- Pass 1 of 1: Completed in 1.1 sec Evaluation Completed in 1.2 sec | 18 | Accept | 0.19651 | 85.263 | 0.19651 | 0.19651 | 0.0047914 | 2.3289e-06 |
使用并行池“本地”评估高表达: -  PASS 1为1:在1.1秒评估中完成1.2秒|19 |接受|0.19651 |52.102 |0.19651 |0.19651 |90.015 |0.00024412 |
使用Parallel Pool 'local'计算tall表达式:- Pass 1 of 1: Completed in 1.1 sec计算在1.3 sec完成| 20 |接受| 0.19651 | 82.238 | 0.19651 | 0.19651 | 0.68775 | 2.7178e-07 |
评估使用并行池“本地”高表达: - 的1遍1:在1.1秒评价完成在1.2秒完成| ===================================================================================================== ||ITER |EVAL |目的|目的|BestSoFar |BestSoFar |西格玛|拉姆达| | | result | | runtime | (observed) | (estim.) | | | |=====================================================================================================| | 21 | Accept | 0.19651 | 49.468 | 0.19651 | 0.19651 | 49.073 | 0.00014766 |
使用并行池“本地”评估高表达: -  PASS 1为1:在1.1秒评估中完成1.2秒|22 |接受|0.19651 |49.183 |0.19651 |0.19651 |25.955 |8.4946E-05 |
使用并行池“本地”评估高表达: -  PASS 1为1:在1.1秒评估中完成1.2秒|23 |接受|0.19651 |84.781 |0.19651 |0.19651 |0.002241 |1.6284e-06 |
使用并行池“本地”评估高表达: -  PASS 1为1:在1.1秒评估中完成1.2秒|24 |接受|0.19651 |90.023 |0.19651 |0.19651 |0.060661 |0.00041011 |
使用Parallel Pool 'local'计算tall表达式:- Pass 1 of 1: Completed in 1.1 sec Evaluation Completed in 1.2 sec | 25 | Accept | 0.19651 | 87.349 | 0.19651 | 0.19651 | 0.035771 | 0.0023369 |
使用并行池'local'计算高表达式:- Pass 1 of 1: Completed in 1.1 sec计算在1.3 sec完成| 26 |接受| 0.19651 | 49.932 | 0.19651 | 0.19651 | 713.45 | 3.5177e-08 |
使用并行池'local'计算高表达式:- Pass 1 of 1: Completed in 1.1 sec计算在1.2 sec完成| 27 |接受| 0.19651 | 87.169 | 0.19651 | 0.19651 | 0.012395 | 1.8186e-06 |
使用并行池“本地”评估高表达: -  PASS 1为1:在1.1秒评估中完成1.2秒|28 |接受|0.19651 |94.87 |0.19651 |0.19651 |0.042872 |0.0015886 |
使用并行池'local'计算高表达式:- Pass 1 of 1: Completed in 1.1 sec计算在1.2 sec完成| 29 | Best | 0.10795 | 37.932 | 0.10795 | 0.19346 | 1.5886 | 4.9128e-07 |
使用并行池'local'计算高表达式:- Pass 1 of 1: Completed in 1.1 sec计算在1.3 sec完成| 30 |接受| 0.19651 | 52.241 | 0.10795 | 0.19356 | 236.64 | 5.0506e-06 |

__________________________________________________________优化完成。MaxobjectiveEvaluations达到了30。总功能评价:30总的经过时间:2455.5118秒总目标函数评估时间:2346.8025最佳观察到的可行点:西格玛拉姆达______ __________ 1.5886 4.9128e-07观察到的目标函数值= 0.10795估计目标函数值= 0.19356函数求时间= 37.9317最佳估计可行点(根据型号):西格玛拉姆达______ __________ 1.5886 4.9128e-07的估计的目标函数值= 0.19356估计函数评估时间= 66.1901
结果=具有属性的贝叶卓优化:ObjectiveFCN:@(Z)收集(FITCKENER(FITCKINER,YTRAIN,'KERNELSCALE',Z.Sigma,'Lambda',Z.Lambda,'verbose',0),ZTEST,YTEST))variabledescriptions:[1×2 optimizablevariable]选项:[1×1结构] minobjective:0.1079 XATMINOBICTIVE:[1×2表] minestimatedobive:0.1936 XAtmineStimative objective:[1×2表] NumObjectiveEvaluations:30总计elaptime:2.4555E + 03 NextPoint:[1×2表] XTRACE:[30×2表] ObjectiveTrace:[30×1双]约束架:[] UserDataTrace:{30×1个单元格} WateSealValionTimetrace:[30×1双]迭代图:[30×1双] errortrace:[30×1双]可行性特性:[30×1逻辑]可行性推理:[30×1双]索引:[30×1双]象限度:[30×1双]估计objectiveminimumtrace:[30×1双]

返回贝叶斯模型中的最佳可行点结果通过使用best函数。使用默认条件最小置信 - 上置信间隔,确定最佳可行点为使目标函数值上置信区间最小的访问点。

zb = bestPoint(结果)
zbest =1×2表西格玛拉姆达______ __________ 1.5886 4.9128e-07

zb的最佳估计值'KernelScale''lambda'名称-值参数。在训练新的优化内核分类器时,可以使用

MDL = fitckernel(Ztrain,Ytrain,'KernelScale'zbest.sigma,'lambda',zbest.lambda)

对于高阵列,优化过程可能需要很长时间。如果数据集太大,无法运行优化过程,则可以尝试仅使用部分数据来优化参数。使用datasample功能并指定'替换','false'抽样数据而不进行替换。

另请参阅

||||||||