主要内容

高数组的贝叶斯优化

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

在高阵列上执行计算时,MATLAB®使用并行池(如果您有并行计算工具箱,则为默认值)™) 如果您想在拥有并行计算工具箱时使用本地MATLAB会话运行示例,可以使用地图还原器函数。

将数据导入MATLAB®

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

ds =数据存储(“airlinesmall.csv”);ds。SelectedVariableNames = {'月''DayofMonth'“星期五”......'deptime'“ArrDelay”“距离”“DepDelay”};ds。TreatAsMissing =“NA”;tt =高(ds)%高桌
使用“local”配置文件启动并行池(parpool)…连接到并行池(工作人员数量:6)。tt = M×7月高表DayofMonth DayOfWeek DepTime DepDelay ArrDelay距离  _____ __________ _________ _______ ________ ________ ________ 10 21 642 8 308年12 26 10 23 5 1 1021 8 296 2055 21 480 1332 10 23 5 13 296 12 10 22 4 629 373 1 10 28 3 1446 59 308 63 10 8 4 928 447 2 10 10 6 859 11 954 1  : : : : : : : : : : : : : :

准备类标签和预测器数据

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

Y = tt。DepDelay > 10%的类标签
Y = M×1高逻辑阵列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(:,结束);

执行贝叶斯优化使用OptimizeHyperparameters

方法自动优化超参数“优化超参数”名称-值参数。

标准化预测变量。

z = zscore(x);

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

rng (“默认”) tallrng (“默认”Mdl = fitckernel(Z,Y,“详细”0,“优化超参数”'汽车'......“HyperparameterOptimizationOptions”结构('获取功能名称'“expected-improvement-plus”))
使用并行池“本地”评估高表达: - 通过第1条:完成7.1秒 - 通行证2:22秒评估中已完成12秒
使用并行池“本地”评估高表达: -  PASS 1为1:在1.6秒评估中完成1.8秒| ===================================================================================================== ||磨练|eval |目标|目标|Bestsofar |Bestsofar |KENELSCALE |lambda | | | result | | runtime | (observed) | (estim.) | | | |=====================================================================================================| | 1 | Best | 0.19672 | 125.49 | 0.19672 | 0.19672 | 1.2297 | 0.0080902 |
使用并行池“本地”评估高表达: - 通过1:在0.93秒的评估中完成,在1.1秒内完成2 |接受|0.19672 |53.653 |0.19672 |0.19672 |0.039643 |2.5756E-05 |
使用并行池'local'计算tall表达式:- Pass 1 of 1: Completed in 1.5 sec Evaluation Completed in 1.6 sec | 3 | Accept | 0.19672 | 52.453 | 0.19672 | 0.19672 | 0.02562 | 1.2555e-08 |
使用Parallel Pool 'local'计算tall表达式:- Pass 1 of 1: Completed in 1.1 sec计算在1.2 sec完成| 4 | Accept | 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 |
使用平行池“本地”评估高表达: - 通过1的1:0.94秒评估完成1.1秒|6 |最好的0.11365 |82.031 |0.11365 |0.11373 |10.609 |0.00025761 |
使用并行池“本地”评估tall表达式:-通过1/1:在0.92秒内完成评估在1.1秒内完成| 7 |接受| 0.19672 | 50.604 | 0.11365 | 0.11373 | 0.0059498 | 0.00043861|
使用Parallel Pool 'local'评估tall表达式:- Pass 1 of 1: Completed in 0.89 sec Evaluation Completed in 0.89 sec | 8 | Accept | 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
使用并行池“本地”评估tall表达式:-通过1/1:在0.87秒内完成评估在1秒内完成| 10 |接受| 0.10433 | 42.215 | 0.10417 | 9.6694 | 1.4948e-05|
使用并行池“本地”评估Toll表达式:-通过1/1:在0.87秒内完成评估在1秒内完成| 11 |最佳| 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 |
使用并行池“本地”评估tall表达式:-通过1/1:在0.89秒内完成评估在1秒内完成| 13 |接受| 0.10408 | 45.429 | 0.10383 | 0.10365 | 8.1769 | 8.5993e-09|
使用并行池“本地”评估tall表达式:-通过1/1:在0.89秒内完成评估在1秒内完成| 14 |接受| 0.10404 | 41.928 | 0.10383 | 0.10361 | 7.6191 | 6.4079e-07|
使用Parallel Pool 'local'计算tall表达式:- Pass 1 of 1: Completed in 0.93 sec
使用Parallel Pool 'local'计算tall表达式:- Pass 1 of 1: Completed in 0.88 sec计算1 sec完成| 16 | Accept | 0.10404 | 44.684 | 0.10351 | 0.10362 | 4.8747 | 1.7838e-08 |
使用并行池“本地”评估tall表达式:-通过1/1:在0.87秒内完成评估在1秒内完成| 17 |接受| 0.10657 | 88.006 | 0.10351 | 0.10357 | 4.8239 | 0.00016344|
| 18 | Best | 0.10299 | 41.303 | 0.10299 | 0.10358 | 3.5555 | 2.7165e-06 |
使用并行池“本地”评估高表达: -  PASS 1为1:在0.89秒的评估中完成,在1秒内完成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 |
使用Parallel Pool 'local'计算tall表达式:- Pass 1 of 1: Completed in 0.88 sec计算在1 sec完成| 23 | Accept | 0.10315 | 41.133 | 0.10299 | 0.10306 | 3.6716 | 1.2445e-08 |
使用并行池“本地”评估高表达: -  PASS 1为1:0.88秒评估完成1秒内完成24 |接受|0.19672 |48.262 |0.10299 |0.10306 |0.0010004 |2.6214E-08 |
使用Parallel Pool 'local'计算tall表达式:- Pass 1 of 1: Completed in 0.89 sec计算1 sec完成| 25 | Accept | 0.19672 | 48.334 | 0.10299 | 0.10306 | 0.21865 | 0.0026529 |
使用并行池“本地”评估高表达: -  PASS 1为1:0.86秒评估完成0.98秒26 |接受|0.19672 |60.229 |0.10299 |0.10306 |299.92 |0.0032109 |
使用并行池“本地”评估高表达: -  PASS 1为1:在0.87秒的评估中完成0.99秒27 |接受|0.19672 |48.361 |0.10299 |0.10306 |0.002436 |0.0040428 |
使用并行池“本地”评估tall表达式:通过1/1:在1.2秒内完成评估在1.4秒内完成| 28 |接受| 0.19672 | 52.539 | 0.10299 | 0.10305 | 0.50559 | 3.3667e-08|
使用Parallel Pool 'local'计算tall表达式:- Pass 1 of 1: Completed in 0.88 sec计算在1 sec完成| 29 | Accept | 0.10354 | 43.957 | 0.10299 | 0.10313 | 3.7754 | 9.5626e-09 |
使用并行池“本地”评估Toll表达式:通过1/1:在0.93秒内完成评估在1.1秒内完成| 30 |接受| 0.10405 | 41.388 | 0.10299 | 0.10315 | 8.9864 | 2.3136e-07|

__________________________________________________________ 优化完成。maxobjective达到30个。总函数计算:30总运行时间:1677.1387秒总目标函数计算时间:1645.7748最佳观测可行点:KernelScale Lambda ___________ __________ 3.5555 2.7165e-06观测目标函数值= 0.10299估计目标函数值= 0.10332函数评估时间= 41.3029最佳估计可行点(根据模型):KernelScale 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属性,方法

使用贝耶斯波特

或者,您可以使用贝耶斯波特函数求超参数的最优值。

将数据集分割为训练集和测试集。为测试集指定1/3的坚持度样品。

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;%标准化测试数据

定义的变量Sigma.λ的最优值“KernelScale”“λ”名称值参数。用优化变量并为变量指定宽范围,因为最佳值未知。将对数转换应用于变量以搜索日志比例上的最佳值。

N =收集(元素个数(Ytrain));%评估高训练数组在记忆中的长度
使用Parallel Pool 'local'计算tall表达式
通过1 / 1:0.95秒完成评估91%完成

评估在1.1秒内完成
σ= optimizableVariable (“西格玛”,[1e-3,1e3],“转换”'日志');λ= optimizableVariable (“λ”[(1 e - 3) / N (1 e3) / N),“转换”'日志');

为贝叶斯优化创建目标函数。目标函数接受一个包含变量的表Sigma.λ,然后计算用该方法训练的二高斯核分类模型的分类损失值fitckernel函数。集'verbose',0fitckernel抑制诊断信息的迭代显示。

minfn = @(z)聚集(损失(FitChingernel(Ztrain,Ytrain,......“KernelScale”,z.sigma,“λ”z.lambda,“详细”0),......中兴通讯、欧美));

优化的参数(σ,λ)的核分类模型,关于分类损失使用贝耶斯波特. 默认情况下,贝耶斯波特在命令行中显示有关优化的迭代信息。对于再现性,请设置AcquisitionFunctionName选项“expected-improvement-plus”. 默认的采集功能取决于运行时,因此可以给出不同的结果。

结果= bayesopt (minfn(σ,λ),'获取功能名称'“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 |
使用Parallel Pool 'local'计算tall表达式:- Pass 1 of 1: Completed in 1.1 sec计算在1.2 sec完成| 2 |接受| 0.19651 | 112.57 | 0.19651 | 0.19651 | 0.039643 | 3.8633e-05 |
使用并行池“本地”评估高表达: -  PASS 1为1:在1.1秒评估中完成,在1.3秒内完成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 |
使用Parallel Pool 'local'计算tall表达式:- Pass 1 of 1: Completed in 1.1 sec Evaluation Completed in 1.2 sec | 5 | Accept | 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 |
使用并行池“本地”评估高表达: -  PASS 1为1:在1.1秒评估中完成1.2秒|7 |接受|0.19651 |110.35 |0.19651 |0.19651 |0.0010228 |1.292E-08 |
使用Parallel Pool 'local'计算tall表达式:- Pass 1 of 1: Completed in 1.1 sec Evaluation Completed in 1.3 sec | 8 | Accept | 0.19651 | 76.594 | 0.19651 | 0.19651 | 0.27475 | 0.0044831 |
使用并行池“本地”评估高表达: -  PASS 1为1:在1.1秒评估中完成1.2秒|9 |接受|0.19651 |77.641 |0.19651 |0.19651 |0.81326 |1.0753E-07 |
使用并行池“本地”评估高表达: -  PASS 1为1:在1.1秒评估中完成1.2秒|10 |接受|0.19651 |100.21 |0.19651 |0.19651 |0.0040507 |0.00011333 |
使用并行池“本地”评估高表达: -  PASS 1为1:在1.1秒评估中完成1.2秒|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 |
使用并行池'local'计算高表达式:- Pass 1 of 1: Completed in 1.1 sec计算在1.2 sec完成| 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 |
使用并行池“本地”评估Toll表达式:通过1/1:在1.1秒内完成评估在1.3秒内完成| 16 |接受| 0.19651 | 110.46 | 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 |
使用并行池“本地”评估tall表达式:通过1/1:在1.1秒内完成评估在1.2秒内完成| 18 |接受| 0.19651 | 85.263 | 0.19651 | 0.0047914 | 2.3289e-06|
使用Parallel Pool 'local'计算tall表达式:- Pass 1 of 1: Completed in 1.1 sec Evaluation Completed in 1.2 sec | 19 | Accept | 0.19651 | 52.102 | 0.19651 | 0.19651 | 90.015 | 0.00024412 |
使用并行池“本地”评估Toll表达式:通过1/1:在1.1秒内完成评估在1.3秒内完成| 20 |接受| 0.19651 | 82.238 | 0.19651 | 0.19651 | 0.68775 | 2.7178e-07|
使用并行池“本地”评估高表达: -  PASS 1为1:在1.1秒评估中完成1.2秒|=====================================================================================================| | Iter | Eval | Objective | Objective | BestSoFar | BestSoFar | sigma | lambda | | | result | | runtime | (observed) | (estim.) | | | |=====================================================================================================| | 21 | Accept | 0.19651 | 49.468 | 0.19651 | 0.19651 | 49.073 | 0.00014766 |
使用Parallel Pool 'local'计算tall表达式:- Pass 1 of 1: Completed in 1.1 sec计算在1.2 sec完成| 22 |接受| 0.19651 | 49.183 | 0.19651 | 0.19651 | 25.955 | 8.4946e-05 |
使用Parallel Pool 'local'计算tall表达式:- Pass 1 of 1: Completed in 1.1 sec计算在1.2 sec完成| 23 |接受| 0.19651 | 84.781 | 0.19651 | 0.19651 | 0.002241 | 1.6284e-06 |
使用并行池'local'计算高表达式:- Pass 1 of 1: Completed in 1.1 sec Evaluation Completed in 1.2 sec | 24 | Accept | 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 |
使用Parallel Pool 'local'计算tall表达式:- Pass 1 of 1: Completed in 1.1 sec Evaluation Completed in 1.2 sec | 28 | Accept | 0.19651 | 94.87 | 0.19651 | 0.19651 | 0.042872 | 0.0015886 |
使用并行池“本地”评估Toll表达式:通过1/1:在1.1秒内完成评估在1.2秒内完成| 29 |最佳| 0.10795 | 37.932 | 0.10795 | 0.19346 | 1.5886 | 4.9128e-07|
使用并行池“本地”评估Toll表达式:通过1/1:在1.1秒内完成评估在1.3秒内完成| 30 |接受| 0.19651 | 52.241 | 0.10795 | 0.19356 | 236.64 | 5.0506e-06|

__________________________________________________________ 优化完成。maxobjective达到30个。总函数计算:30总运行时间:2455.5118秒总目标函数计算时间:2346.8025观测目标函数值= 0.10795估计目标函数值= 0.19356函数评价时间= 37.9317最佳估计可行点(根据模型):估计的目标函数值= 0.19356估计的函数评价时间= 66.1901
结果= BayesianOptimization属性:ObjectiveFcn: @ (z)收集(损失(fitckernel (Ztrain、Ytrain KernelScale, z.sigma,λ,z.lambda,“详细”,0)、中兴、欧美))VariableDescriptions:[1×2 optimizableVariable]选项:[1×1 struct] MinObjective: 0.1079 XAtMinObjective:[1×2表]MinEstimatedObjective: 0.1936 XAtMinEstimatedObjective:[1×2 table] numobjectiveevaluationtimetrace: 30 TotalElapsedTime: 2.4555e+03 NextPoint: [1×2 table] XTrace: [30×2 table] ObjectiveTrace: [30×1 double] ConstraintsTrace: [] UserDataTrace: {30×1 cell} ObjectiveEvaluationTimeTrace: [30×1 double] IterationTimeTrace: [30×1 double] ErrorTrace: [30×1 double][30×1 logical] FeasibilityProbabilityTrace: [30×1 double] IndexOfMinimumTrace: [30×1 double] ObjectiveMinimumTrace: [30×1 double] EstimatedObjectiveMinimumTrace: [30×1 double]

返回贝叶斯模型中的最佳可行点结果通过使用bestPoint函数。使用默认标准min-visited-upper-confidence-interval,这决定了作为访问点的最佳可行点,其最小化目标函数值上的上置信区间。

zbest = bestpoint(结果)
zb =1×2表Sigma lambda ______ __________ 1.5886 4.9128e-07

桌子zb包含最佳估计值“KernelScale”“λ”命名值参数。您可以在使用

Mdl = fitckernel (Ztrain Ytrain,“KernelScale”zbest.sigma,“λ”zbest.lambda)

对于高阵列,优化过程可能需要很长时间。如果数据集太大,无法运行优化过程,则可以尝试仅使用部分数据来优化参数。使用datasample.功能和指定“替换”,“假”在不替换的情况下抽样数据。

另见

||||||||