主要内容

高数组的贝叶斯优化

这个例子展示了如何使用贝叶斯优化来选择最优的参数来训练核分类器“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)%高表
使用“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 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(:,结束);

执行贝叶斯优化使用OptimizeHyperparameters

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

标准化预测变量。

Z = zscore (X);

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

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 |
使用并行池'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 |
使用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 |
使用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
使用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 |
使用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 |
使用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 |
| 18 | Best | 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 |
使用并行池'local'计算tall表达式:在0.89秒完成评估在1秒完成  |=====================================================================================================| | Iter | Eval客观客观| | | BestSoFar | BestSoFar | KernelScaleλ| | | | |结果运行时| |(观察)| (estim) | | ||=====================================================================================================| | 21日|接受| 0.10345 | 41.418 | 0.10299 | 0.10322 | 3.3655 | 9.082 e-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 |
| 24 | Accept | 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 |
使用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 |
使用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 |
使用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 |

__________________________________________________________ 优化完成。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属性,方法

通过使用执行贝叶斯优化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));%评估高训练数组在记忆中的长度
使用Parallel Pool 'local'计算tall表达式
通过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”
使用并行池'local'计算tall表达式:在1.1秒完成评估在1.3秒完成  |=====================================================================================================| | Iter | Eval客观客观| | | BestSoFar | BestSoFarσ| |λ| | |结果| | |运行时(观察)| (estim) | | ||=====================================================================================================| | 最好1 | | 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 |
使用并行池'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 |
使用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 |
使用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 |
使用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 |
使用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 |
使用并行池'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 |
使用并行池'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 |
使用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 |
使用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 |
使用并行池'local'计算tall表达式:在1.1秒完成评估在1.2秒完成  |=====================================================================================================| | Iter | Eval客观客观| | | BestSoFar | BestSoFarσ| |λ| | |结果| | |运行时(观察)| (estim) | | ||=====================================================================================================| | 21日|接受| 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 |
使用并行池'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 |

__________________________________________________________ 优化完成。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,确定最佳可行点为使目标函数值上置信区间最小的访问点。

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

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

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

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

另请参阅

||||||||