朝着自动化使用贝叶斯优化模型选择
这个例子展示了如何构建多个分类模型对于一个给定的训练数据集,使用贝叶斯优化hyperparameters优化和选择模型对测试数据集执行最好的。
培训几个模型和优化其hyperparameters往往需要数天或数周。创建一个脚本开发和比较多个模型自动可以更快。您还可以使用贝叶斯优化加速这个过程。而不是训练每个模型hyperparameters不同,你选择几个不同的模型和优化默认hyperparameters使用贝叶斯优化。找到一组最优的贝叶斯优化hyperparameters对于一个给定的模型通过最小化目标函数的模型。这种优化算法选择新战略hyperparameters在每个迭代中,通常到达最优组hyperparameters比一个简单的网格搜索更快。您可以使用脚本在这个例子训练几个使用贝叶斯分类模型的优化对于一个给定的训练数据集和识别模型,对测试执行最好的数据集。
另外,选择一个分类模型自动选择分类器的类型和hyperparameter值,使用fitcauto
。例如,看到的自动化与贝叶斯分类器的选择和亚莎的优化。
加载示例数据
下面的例子使用了1994年的人口普查数据存储在census1994.mat
。数据集由人口数据来自美国人口普查局预测一个人是否使每年超过50000美元。分类的任务是配合一个模型,预测人们的工资类别考虑到他们的年龄,工人阶级,教育程度、婚姻状况、种族、等等。
加载示例数据census1994
和显示的变量数据集。
负载census1994谁
名称大小字节类属性描述2960 x74 char adultdata 32561 x15 1872566表成人944466 x15 16281表
census1994
包含了训练数据集adultdata
和测试数据集成人
。对于这个示例,以减少运行时间,子样品5000训练和测试观察,从原来的表adultdata
和成人
,通过使用datasample
函数。(你可以跳过这一步,如果你想使用完整的数据集)。
NumSamples = 5000;s = RandStream (“mlfg6331_64”);%的再现性adultdata = datasample (s adultdata NumSamples,“替换”、假);成人,成人= datasample(年代,NumSamples,“替换”、假);
预览前几排的训练数据集。
头(adultdata)
年龄workClass fnlwgt教育education_num marital_status种族职业关系性capital_gain capital_loss hours_per_week native_country工资_______ _________________ ___ ___________ __________公司_____________ ______专攻_______ _______是_____________ _________________ * * * * * * 39私人4.91 e + 05单身汉13未婚Exec-managerial相关黑人男性45 0 0美国< = 50 k 25私人2.2022 e + 05年11日7未婚Handlers-cleaners自己孩子的白人男性45 0 0美国< = 50 k 24私人2.2761 e + 05年10 6离婚Handlers-cleaners未婚白人女性0 0 58美国< = 50 k 51私人1.7329 e + 05 HS-grad 9离婚的其他服务家族白人女性40 0 0美国< = 50 k 54私人2.8029 e + 05一些大学10 Married-civ-spouse销售丈夫白人男性0 0 32美国< = 50 k 53 Federal-gov 39643 HS-grad 9寡妇Exec-managerial家族白人女性0 0 58美国< = 50 k 52私人81859 HS-grad 9 Married-civ-spouse Machine-op-inspct丈夫48美国白人男性0 0 > 50 k 37私人1.2429 e + 05一些大学10 Married-civ-spouse Adm-clerical丈夫白人男性0 0 50美国< = 50 k
每一行代表一个成年人的属性,如年龄、教育、职业。最后一列工资
显示一个人是否有一个工资每年小于或等于50000美元或每年超过50000美元。
理解数据,选择分类模型
统计和机器学习工具箱™提供几个选项分类,包括分类树,判别分析,朴素贝叶斯,最近的邻居,支持向量机(svm),和分类效果。金宝app算法的完整列表,请参阅分类。
在选择算法用于你的问题之前,检查你的数据集。人口普查数据有几个值得注意的特点:
数据表格和包含数字和分类变量。
含有缺失值的数据。
响应变量(
工资
)有两个类(二进制分类)。
没有做任何假设或使用先验知识的算法,你希望在你的数据工作,你只是培训的所有算法支持表格数据和二进制分类。金宝app纠错输出编码(ECOC)模型用于数据超过两类。判别分析和最近邻算法不包含数字和分析数据分类变量。因此,支持向量机算法适合这个例子,一个决策树,一个决策树,朴素贝叶斯模型。其中的一些模型,如决策树和朴素贝叶斯模型,更善于处理数据缺失值;也就是说,他们返回非南
预测分数与失踪的观察值。
建立模型和优化Hyperparameters
加快这一进程,定制hyperparameter优化选项。指定“ShowPlots”
作为假
和“详细”
分别为0禁用情节和信息显示。同时,指定“UseParallel”
作为真正的
贝叶斯优化并行运行,这就需要并行计算工具箱™。由于nonreproducibility平行的时机,平行贝叶斯优化不一定产生可重复的结果。
hypopts =结构(“ShowPlots”假的,“详细”0,“UseParallel”,真正的);
开始一个平行的池。
poolobj =质量;
开始平行池(parpool)使用“本地”概要文件…连接到平行池(工人数量:8)。
你可以适应训练数据集和调优参数容易通过调用每个函数拟合和设置它“OptimizeHyperparameters”
名称-值对参数“汽车”
。创建分类模型。
内核& % SVM: SVM与多项式与高斯核支持向量机mdls {1} = fitcsvm (adultdata,“工资”,“KernelFunction”,多项式的,“标准化”,“上”,…“OptimizeHyperparameters”,“汽车”,“HyperparameterOptimizationOptions”,hypopts);mdls {2} = fitcsvm (adultdata,“工资”,“KernelFunction”,“高斯”,“标准化”,“上”,…“OptimizeHyperparameters”,“汽车”,“HyperparameterOptimizationOptions”,hypopts);%决策树mdls {3} = fitctree (adultdata,“工资”,…“OptimizeHyperparameters”,“汽车”,“HyperparameterOptimizationOptions”,hypopts);%的决策树mdls {4} = fitcensemble (adultdata,“工资”,“学习者”,“树”,…“OptimizeHyperparameters”,“汽车”,“HyperparameterOptimizationOptions”,hypopts);%朴素贝叶斯mdls {5} = fitcnb (adultdata,“工资”,…“OptimizeHyperparameters”,“汽车”,“HyperparameterOptimizationOptions”,hypopts);
警告:建议您首先标准化数值预测当优化朴素贝叶斯的宽度参数。忽略这个警告如果你已经做到了。
情节最低目标曲线
提取每个模型的贝叶斯优化结果和图的最小目标函数为每个模型的观测值在每次迭代的hyperparameter优化。目标函数值对应于误分类率衡量5倍交叉验证使用训练数据集,情节比较每个模型的性能。
图保存在N =长度(mdls等);为i = 1: N mdl = mdls {};结果= mdls{我}.HyperparameterOptimizationResults;情节(results.ObjectiveMinimumTrace“标记”,“o”,“MarkerSize”5);结束名称= {“SVM-Polynomial”,“SVM-Gaussian”,“决策树”,“Ensemble-Trees”,“天真的贝叶斯};传奇(名称,“位置”,“东北”)标题(“贝叶斯优化”)包含(的迭代次数)ylabel (“最低客观价值”)
使用贝叶斯优化找到更好的hyperparameter集通过数次迭代改进的性能模型。在这种情况下,情节表明决策树的合奏的最佳预测精度数据。该模型表现良好持续几个迭代和不同的贝叶斯优化hyperparameters。
检查性能与测试集
检查测试数据集的分类器性能通过使用混淆矩阵和接受者操作特征(ROC)曲线。
找到标签和测试的分数值预测数据集。
标签=细胞(N, 1);分数=细胞(N, 1);为i = 1: N[标签{我},分数{我}]=预测(mdls{},成人);结束
混淆矩阵
获得最可能的类为每个测试观察使用预测
每个模型的函数。然后计算预测的混淆矩阵类和已知的(真正)类的测试数据集使用confusionchart
函数。
细胞(图c = N, 1);为i = 1: N次要情节(2、3、i) c{我}= confusionchart (adulttest.salary、标签{我});标题(名字{我})结束
对角线元素表示的数量正确分类一个给定的类的实例。非对角元素实例更进一步的观察。
ROC曲线
检查分类器性能更紧密地通过为每个分类器绘制ROC曲线和计算ROC曲线下的面积(AUC)。ROC曲线显示了真阳性率与假阳性率不同阈值的分类的分数。真阳性的一个完美的分类器,速度总是1无论阈值,AUC = 1。随机分配观测的二元分类器类,AUC = 0.5。大的AUC值(接近1)表明良好的分类性能。
ROC曲线计算指标,找到AUC值通过创建一个rocmetrics
为每个分类器对象。绘制ROC曲线的标签“< = 50 k”
通过使用情节
的函数rocmetrics
。
图AUC = 0 (1, N);为i = 1: N rocObj = rocmetrics (adulttest.salary,{我},mdls{我}.ClassNames);(r, g) =情节(rocObj,“类名”,“< = 50 k”);r。DisplayName =取代(r.DisplayName“< = 50 k”我,名字{});g (1)。DisplayName =加入([名字{我},“模型操作点”]);AUC (i) = rocObj.AUC (1);持有在结束标题(“类< = 50 k ROC曲线”)举行从
ROC曲线显示了真阳性率与假阳性率(或者,灵敏度与1-specificity)不同阈值的分类器的输出。
现在情节AUC值使用条形图。真阳性的一个完美的分类器,速度总是1不管阈值,AUC = 1。对于随机分配观察类的分类器,AUC = 0.5。更大的AUC值表明更好的分类性能。
图酒吧(AUC)标题(曲线下的面积的)包含(“模型”)ylabel (“AUC”)xticklabels(名字)xtickangle (30) ylim ([0.85, 0.925])
基于混淆矩阵和AUC条形图、决策树和支持向量机模型实现的整体精度比决策树和朴素贝叶斯模型。
简历最有前途的模型的优化
贝叶斯优化运行在所有模型进行进一步的迭代可以计算昂贵。相反,选择模型的一个子集,迄今表现良好,继续优化30通过使用更多的迭代的简历
函数。图的最小观测值贝叶斯优化的目标函数为每个迭代。
图保存在selectedMdls = mdls ((1、2、4));newresults =细胞(1、长度(selectedMdls));为i = 1:长度(selectedMdls) newresults{我}=简历(selectedMdls{我}.HyperparameterOptimizationResults,“MaxObjectiveEvaluations”,30);情节(newresults{我}.ObjectiveMinimumTrace,“标记”,“o”,“MarkerSize”5)结束标题(“贝叶斯优化与简历”)包含(的迭代次数)ylabel (“最低客观价值”)({传奇“SVM-Polynomial”,“SVM-Gaussian”,“Ensemble-Trees”},“位置”,“东北”)
前30迭代对应于第一轮贝叶斯优化。接下来的30迭代对应的结果的简历
函数。恢复优化是有用,因为失去后继续进一步减少30迭代。
另请参阅
confusionchart
|perfcurve
|的简历
|BayesianOptimization