主要内容

高数组贝叶斯优化

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

当您在高数组上执行计算时,MATLAB®使用并行池(如果您有并行计算工具箱™则默认)或本地MATLAB会话。如果在拥有并行计算工具箱的情况下,希望使用本地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 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 0::

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

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

删除行X而且Y包含丢失数据的。

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

执行贝叶斯优化使用OptimizeHyperparameters

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

标准化预测变量。

Z = zscore (X);

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

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

__________________________________________________________ 优化完成。最大目标:达到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属性,方法

实现贝叶斯优化bayesopt

或者,您也可以使用bayesopt函数求超参数的最优值。

将数据集分为训练集和测试集。为测试集指定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;标准化测试数据

定义的变量σ而且λ找到最优值“KernelScale”而且“λ”名称-值参数。使用optimizableVariable并为变量指定一个较大的范围,因为最佳值是未知的。对变量进行对数变换,在对数尺度上寻找最优值。

N =收集(元素个数(Ytrain));在内存中计算高训练数组的长度
使用并行池'local'计算高表达式:-通过1:0%完成计算0%完成
-通过1 / 1:在0.95秒内完成91%的评估

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

为贝叶斯优化创建目标函数。目标函数接受一个包含变量的表σ而且λ,然后对训练的二元高斯核分类模型计算分类损失值fitckernel函数。集“详细”,0fitckernel抑制诊断信息的重复显示。

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

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

结果= bayesopt (minfn(σ,λ),“AcquisitionFunctionName”“expected-improvement-plus”
使用Parallel Pool 'local'计算高表达式:在1.1秒完成评估在1.3秒完成  |=====================================================================================================| | Iter | Eval客观客观| | | BestSoFar | BestSoFarλσ| | | | | |结果运行时| | | (estim(观察) .) | | | |=====================================================================================================| | 最好1 | | 0.19651 | 84.526 | 0.19651 | 0.19651 | 1.2297 | 0.012135 |
使用并行池'local'评估高表达式:-通过1 / 1:在1.1秒完成评估在1.2秒完成| 2 |接受| 0.19651 | 112.57 | 0.19651 | 0.19651 | 0.039643 | 3.8633e-05 |
使用并行池'local'计算高表达式:-通过1 / 1:在1.1秒完成评估在1.3秒完成| 3 |接受| 0.19651 | 80.282 | 0.19651 | 0.19651 | 0.02562 | 1.8832e-08 |
使用并行池'local'计算高表达式:-通过1 / 1:在1.1秒完成评估在1.3秒完成| 4 |接受| 0.19651 | 52.306 | 0.19651 | 0.19651 | 92.644 | 1.8084e-07 |
使用并行池'local'评估高表达式:-通过1 / 1:在1.1秒完成评估在1.2秒完成| 5 |接受| 0.19651 | 52.717 | 0.19651 | 0.19651 | 978.95 | 0.00015066 |
使用并行池'local'计算高表达式:-通过1 / 1:在1.1秒完成评估在1.2秒完成| 6 |接受| 0.19651 | 90.336 | 0.19651 | 0.19651 | 0.0089609 | 0.0059189 |
使用并行池'local'评估高表达式:-通过1 / 1:在1.1秒完成评估在1.2秒完成| 7 |接受| 0.19651 | 110.35 | 0.19651 | 0.19651 | 0.0010228 | 1.292e-08 |
使用并行池'local'评估高表达式:-通过1 / 1:在1.1秒完成评估在1.3秒完成| 8 |接受| 0.19651 | 76.594 | 0.19651 | 0.19651 | 0.27475 | 0.0044831 |
使用并行池'local'评估高表达式:-通过1 / 1:在1.1秒完成评估在1.2秒完成| 9 |接受| 0.19651 | 77.641 | 0.19651 | 0.19651 | 0.81326 | 1.0753e-07 |
使用并行池'local'评估高表达式:-通过1 / 1:在1.1秒完成评估在1.2秒完成| 10 |接受| 0.19651 | 100.21 | 0.19651 | 0.19651 | 0.0040507 | 0.00011333 |
使用并行池'local'计算高表达式:-通过1 / 1:在1.1秒完成评估在1.2秒完成| 11 |接受| 0.19651 | 52.287 | 0.19651 | 0.19651 | 964.67 | 1.2786e-08 |
使用并行池'local'计算高表达式:-通过1 / 1:在1.1秒完成评估在1.2秒完成| 12 |接受| 0.19651 | 107.7 | 0.19651 | 0.19651 | 0.24069 | 0.0070503 |
使用并行池'local'计算高表达式:-通过1 / 1:在1.1秒完成评估在1.2秒完成| 13 |接受| 0.19651 | 52.092 | 0.19651 | 0.19651 | 974.15 | 0.010898 |
使用并行池'local'计算高表达式:-通过1 / 1:在1.1秒完成评估在1.3秒完成| 14 |接受| 0.19651 | 92.184 | 0.19651 | 0.19651 | 0.0013246 | 0.0011748 |
使用并行池'local'计算高表达式:-通过1 / 1:在1.1秒完成评估在1.2秒完成| 15 |接受| 0.19651 | 87.893 | 0.19651 | 0.19651 | 0.0067415 | 1.9074e-07 |
使用并行池'local'评估高表达式:-通过1 / 1:在1.1秒完成评估在1.3秒完成| 16 |接受| 0.19651 | 110.46 | 0.19651 | 0.19651 | 0.020448 | 1.247e-08 |
使用并行池'local'计算高表达式:-通过1 / 1:在1.1秒完成评估在1.2秒完成| 17 |接受| 0.19651 | 104.12 | 0.19651 | 0.19651 | 0.0016556 | 0.0001784 |
使用并行池'local'计算高表达式:-通过1 / 1:在1.1秒完成评估在1.2秒完成| 18 |接受| 0.19651 | 85.263 | 0.19651 | 0.19651 | 0.0047914 | 2.3289e-06 |
使用并行池'local'评估高表达式:-通过1 / 1:在1.1秒完成评估在1.2秒完成| 19 |接受| 0.19651 | 52.102 | 0.19651 | 0.19651 | 90.015 | 0.00024412 |
使用并行池'local'评估高表达式:-通过1 / 1:在1.1秒完成评估在1.3秒完成| 20 |接受| 0.19651 | 82.238 | 0.19651 | 0.19651 | 0.68775 | 2.7178e-07 |
使用Parallel Pool 'local'计算高表达式:在1.1秒完成评估在1.2秒完成  |=====================================================================================================| | Iter | Eval客观客观| | | BestSoFar | BestSoFarλσ| | | | | |结果运行时| | | (estim(观察) .) | | | |=====================================================================================================| | 21日|接受| 0.19651 | 49.468 | 0.19651 | 0.19651 | 49.073 | 0.00014766 |
使用并行池'local'评估高表达式:-通过1 / 1:在1.1秒完成评估在1.2秒完成| 22 |接受| 0.19651 | 49.183 | 0.19651 | 0.19651 | 25.955 | 8.4946e-05 |
使用并行池'local'计算高表达式:-通过1 / 1:在1.1秒完成评估在1.2秒完成| 23 |接受| 0.19651 | 84.781 | 0.19651 | 0.19651 | 0.002241 | 1.6284e-06 |
使用并行池'local'评估高表达式:-通过1 / 1:在1.1秒完成评估在1.2秒完成| 24 |接受| 0.19651 | 90.023 | 0.19651 | 0.19651 | 0.060661 | 0.00041011 |
使用并行池'local'计算高表达式:-通过1 / 1:在1.1秒完成评估在1.2秒完成| 25 |接受| 0.19651 | 87.349 | 0.19651 | 0.19651 | 0.035771 | 0.0023369 |
使用并行池'local'计算高表达式:-通过1 / 1:在1.1秒完成评估在1.3秒完成| 26 |接受| 0.19651 | 49.932 | 0.19651 | 0.19651 | 713.45 | 3.5177e-08 |
使用并行池'local'计算高表达式:-通过1 / 1:在1.1秒完成评估在1.2秒完成| 27 |接受| 0.19651 | 87.169 | 0.19651 | 0.19651 | 0.012395 | 1.8186e-06 |
使用并行池'local'计算高表达式:-通过1 / 1:在1.1秒完成评估在1.2秒完成| 28 |接受| 0.19651 | 94.87 | 0.19651 | 0.19651 | 0.042872 | 0.0015886 |
使用并行池'local'评估高表达式:-通过1 / 1:在1.1秒完成评估在1.2秒完成| 29 |最佳| 0.10795 | 37.932 | 0.10795 | 0.19346 | 1.5886 | 4.9128e-07 |
使用并行池'local'评估高表达式:-通过1 / 1:在1.1秒完成评估在1.3秒完成| 30 |接受| 0.19651 | 52.241 | 0.10795 | 0.19356 | 236.64 | 5.0506e-06 |

__________________________________________________________ 优化完成。最大目标:达到30。总功能评估:30总运行时间:2455.5118秒总目标功能评估时间:2346.8025最佳观测可行点:sigma lambda ______ __________ 1.5886 4.9128e-07观测目标函数值= 0.10795估计目标函数值= 0.19356函数评估时间= 37.9317最佳估计可行点(根据模型):sigma lambda ______ __________ 1.5886 4.9128e-07估计目标函数值= 0.19356估计函数评估时间= 66.1901
results = BayesianOptimization with properties: ObjectiveFcn: @(z)gather(loss(fitckernel(Ztrain,Ytrain,'KernelScale',z.sigma,'Lambda',z. Lambda,'Verbose',0),Ztest,Ytest)) variabledescription: [1×2 optimizableVariable] Options: [1×1 struct] MinObjective: 0.1079 XAtMinObjective: [1×2 table] minestimatedobjobjective: 0.1936 xatminestimatedobjobjective: [1×2 table] numobjectiveevaluts30 TotalElapsedTime: 2.4555e+03 NextPoint: [1×2 table] XTrace: [30×2 table] ObjectiveTrace:(30×1双)ConstraintsTrace: [] UserDataTrace:{30×1细胞}ObjectiveEvaluationTimeTrace:[30×1双]IterationTimeTrace:[30×1双]ErrorTrace:[30×1双]FeasibilityTrace:[30×1逻辑]FeasibilityProbabilityTrace:[30×1双]IndexOfMinimumTrace:[30×1双]ObjectiveMinimumTrace:[30×1双]EstimatedObjectiveMinimumTrace:[30×1双)

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

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

zb的最优估计值“KernelScale”而且“λ”名称-值参数。可以在训练新的优化内核分类器时指定这些值

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

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

另请参阅

||||||||

Baidu
map