Moving Towards Automating Model Selection Using Bayesian Optimization

This example shows how to build multiple classification models for a given training data set, optimize their hyperparameters using Bayesian optimization, and select the model that performs the best on a test data set.

训练多种型号并调整其超参数通常需要几天或几周。创建一个自动开发和比较多个模型的脚本可能会更快。您也可以使用贝叶斯优化来加快该过程。您可以选择一些不同的模型并使用贝叶斯优化来调整其默认的超参数。贝叶斯优化通过最大程度地降低模型的目标函数,找到了给定模型的最佳超参数集。该优化算法从策略性地选择了每次迭代中的新的超参数,并且通常比简单的网格搜索更快地到达最佳的超参数集。您可以在此示例中使用脚本使用贝叶斯优化给定培训数据集的训练多个分类模型,并确定在测试数据集中表现最佳的模型。

另外,要在分类器类型和超参数值的选择中自动选择分类模型,请使用fitcauto。例如,请参阅贝叶斯优化的自动分类器选择

加载样本数据

此示例使用存储在1994年的人口普查数据人口普查1994.mat。数据集由美国人口普查局的人口统计数据组成,以预测个人是否每年赚取超过50,000美元。分类任务是拟合一个模型,该模型可以预测人们的年龄,工人阶级,教育水平,婚姻状况,种族等等的薪水类别。

Load the sample data人口普查1994and display the variables in the data set.

加载人口普查1994谁是
名称大小字节类属性说明20x74 2960 char成人数据32561x15 1873655表成人table yepter -test 16281x15 945793表

人口普查1994包含培训数据集adultdata和测试数据集adulttest。对于此示例,为了减少运行时间,从原始表中分别从原始表中进行了5000个训练和测试观测值adultdataandadulttest,通过使用数据样本功能。(You can skip this step if you want to use the complete data sets.)

NumSamples = 5000; s = RandStream('MLFG6331_64');% For reproducibility成人达塔= dataSample(s,成人达塔,numsamples,'Replace',,,,错误的);adulttest = datasample(s,adulttest,NumSamples,'Replace',,,,错误的);

预览培训数据集的前几行。

头(成人)
ans =8×15桌age workClass fnlwgt education education_num marital_status occupation relationship race sex capital_gain capital_loss hours_per_week native_country salary ___ ___________ __________ ____________ _____________ __________________ _________________ ______________ _____ ______ ____________ ____________ ______________ ______________ ______ 39 Private 4.91e+05 Bachelors 13 Never-married Exec-managerial Other-relative Black Male 0 0 45 United-States <=50K 25 Private 2.2022e+05 11th 7 Never-married Handlers-cleaners Own-child White Male 0 0 45 United-States <=50K 24 Private 2.2761e+05 10th 6 Divorced Handlers-cleaners Unmarried White Female 0 0 58 United-States <=50K 51 Private 1.7329e+05 HS-grad 9 Divorced Other-service Not-in-family White Female 0 0 40 United-States <=50K 54 Private 2.8029e+05 Some-college 10 Married-civ-spouse Sales Husband White Male 0 0 32 United-States <=50K 53 Federal-gov 39643 HS-grad 9 Widowed Exec-managerial Not-in-family White Female 0 0 58 United-States <=50K 52 Private 81859 HS-grad 9 Married-civ-spouse Machine-op-inspct Husband White Male 0 0 48 United-States >50K 37 Private 1.2429e+05 Some-college 10 Married-civ-spouse Adm-clerical Husband White Male 0 0 50 United-States <=50K

Each row represents the attributes of one adult, such as age, education, and occupation. The last column薪水显示一个人的薪水小于或等于每年50,000美元还是大于每年50,000美元。

测试数据集adulttest包含两个不必要的空类。通过使用拆卸功能。

成人test.salary = removecats(成人test.salary);

了解数据并选择分类模型

Statistics and Machine Learning Toolbox™ provides several options for classification, including classification trees, discriminant analysis, naive Bayes, nearest neighbors, support vector machines (SVMs), and classification ensembles. For the complete list of algorithms, see分类

在选择用于问题的算法之前,请检查数据集。人口普查数据具有几个值得注意的特征:

  • 数据是表格的,并且包含数字和分类变量。

  • 数据包含缺失值。

  • 响应变量(薪水)有两个类(二进制分类)。

无需做出任何假设或使用您期望在数据上正常工作的算法的先验知识,只需训练所有支持表格数据和二进制分类的算法即可。万博1manbetx错误纠正的输出代码(ECOC)模型用于具有两个以上类的数据。判别分析和最近的邻居算法不分析包含数字和分类变量的数据。因此,适用于此示例的算法是SVM,决策树,决策树的合奏和天真的贝叶斯模型。

建立模型和调整超标剂

To speed up the process, customize the hyperparameter optimization options. Specify'ShowPlots'作为错误的and“冗长”为0分别禁用绘图和消息显示。另外,指定“ useparalallel'作为true在并行运行贝叶斯优化,这需要并行计算工具箱™。由于平行时序的可重复性不可再生,平行的贝叶斯优化不一定会产生可重复的结果。

hypopts = struct('ShowPlots',,,,错误的,,,,“冗长”,0,“ useparalallel',真的);

Start a parallel pool.

poolobj = gcp;
使用“本地”配置文件开始并行池(PARPOOL)...连接到并行池(工人数量:6)。

您可以通过调用每个拟合功能并设置其“优化缩影”name-value pair argument to'汽车'。Create the classification models.

% SVMs: SVM with polynomial kernel & SVM with Gaussian kernelmdls {1} = fitCSVM(成人达塔,'salary',,,,'KernelFunction',,,,'polynomial',,,,'Standardize',,,,'上',,,,...“优化缩影”,,,,'汽车',,,,“高参数量化措施”,hypopts);mdls {2} = fitCSVM(成人达塔,'salary',,,,'KernelFunction',,,,“高斯”,,,,'Standardize',,,,'上',,,,...“优化缩影”,,,,'汽车',,,,“高参数量化措施”,hypopts);% 决策树mdls{3} = fitctree(adultdata,'salary',,,,...“优化缩影”,,,,'汽车',,,,“高参数量化措施”,hypopts);决策树的百分比mdls{4} = fitcensemble(adultdata,'salary',,,,“学习者”,,,,'tree',,,,...“优化缩影”,,,,'汽车',,,,“高参数量化措施”,hypopts);%天真的贝叶斯mdls {5} = fitcnb(成人达塔,'salary',,,,...“优化缩影”,,,,'汽车',,,,“高参数量化措施”,hypopts);
Warning: It is recommended that you first standardize all numeric predictors when optimizing the Naive Bayes 'Width' parameter. Ignore this warning if you have done that.

Plot Minimum Objective Curves

从每个模型中提取贝叶斯优化,并绘制每个模型的目标函数的最小观测值,而超参数优化的每一个迭代。目标函数值对应于使用训练数据集通过五倍的交叉验证测量的错误分类率。该图比较了每个模型的性能。

figure holdonn =长度(mdls);为了i = 1:N mdl = mdls{i}; results = mdls{i}.HyperparameterOptimizationResults; plot(results.ObjectiveMinimumTrace,'Marker',,,,'o',,,,'MarkerSize',5);结尾名称= {'SVM-Polynomial',,,,'SVM-Gaussian',,,,'决策树',,,,'Ensemble-Trees',,,,“天真的贝叶斯”}; legend(names,'Location',,,,'东北')标题(“贝叶斯优化”)xlabel('Number of Iterations')ylabel(“最低客观价值”

使用贝叶斯优化找到更好的超参数集可以改善几种迭代的模型性能。在这种情况下,图表明决策树的集合具有数据的最佳预测准确性。该模型在几个迭代和不同的贝叶斯优化超标仪中始终如一地表现。

检查测试集的性能

使用混淆矩阵和接收器操作特征(ROC)曲线检查分类器性能。

Find the predicted labels and the score values of the test data set.

label = cell(N,1); score = cell(N,1);为了i = 1:N [label{i},score{i}] = predict(mdls{i},adulttest);结尾

Confusion Matrix

通过使用predict每个模型的功能。然后使用预测类和已知的(真)类测试数据集来计算混淆矩阵混乱功能。

figure c = cell(N,1);为了i = 1:N subplot(2,3,i) c{i} = confusionchart(adulttest.salary,label{i}); title(names{i})结尾

对角元素表示给定类的正确分类实例的数量。非对角线元素是错误分类观察结果的实例。

ROC曲线

通过为每个分类器绘制ROC曲线,更仔细地检查分类器性能。使用perfcurve功能以获得XandyROC曲线的坐标和计算的曲线下面积(AUC)值(AUC)值Xandy

绘制与标签相对应的分数值的ROC曲线'<= 50k',检查从predict功能。列顺序与培训数据集中响应变量的类别顺序相同。显示类别顺序。

c =类别(成人销售)
c =2×1 cell{'<=50K'} {'>50K' }

Plot the ROC curves.

figure holdonAUC = zeros(1,N);为了i = 1:n [x,y,〜,auc(i)] = perfcurve(成人test.salary,得分{i}(:,1),'<= 50k');plot(X,Y)结尾标题(“ ROC曲线”)xlabel(“误报率”)ylabel('True Positive Rate')图例(名称,'Location',,,,'southeast'

对于分类器输出的不同阈值,ROC曲线显示了真实的正速率与假正率(或敏感性相对于1特定性)。

现在,使用条形图绘制AUC值。对于一个完美的分类器,其真正的正率总是为1,而不论阈值如何,AUC = 1。对于随机分配观测值的分类器,AUC = 0.5。较大的AUC值表示更好的分类器性能。

图栏(AUC)标题(AUC)(“曲线下的区域”)xlabel('Model')ylabel('auc')xticklabels(names) xtickangle(30) ylim([0,1])

基于混淆矩阵和AUC条形图,决策树和SVM模型的合奏比决策树和天真的贝叶斯模型获得了更好的精度。

简历最有前途的模型的优化

在所有型号上运行贝叶斯优化以进行进一步迭代可能在计算上很昂贵。相反,选择到目前为止表现良好的模型子集,并通过使用该迭代来继续对30个迭代的优化恢复功能。绘制贝叶斯优化的每次迭代的目标函数的最小观察值。

figure holdonselectedMdls = mdls([1,2,4]); newresults = cell(1,length(selectedMdls));为了i = 1:长度(selectedmdls)newResults {i} =简历(selectedmdls {i} .hyperparameteroptimization results,“MaxObjectiveEvaluations”,30);绘图(newResults {i} .objectiveminimumtrace,'Marker',,,,'o',,,,'MarkerSize',,,,5)结尾标题('Bayesian Optimization with resume')xlabel('Number of Iterations')ylabel(“最低客观价值”)legend({'SVM-Polynomial',,,,'SVM-Gaussian',,,,'Ensemble-Trees'},'Location',,,,'东北'

前30个迭代对应于第一轮贝叶斯优化。接下来的30个迭代对应于恢复功能。恢复优化是有用的,因为在前30个迭代后,损失继续进一步减少。

也可以看看

|||

Related Topics