一文彻底搞懂自动机器学习AutoMLTPOT
本文将系统全面的介绍自动机器学习的其中一个常用框架:TPOT,一起研习如何在Python中将TPOT用于AutoML和ScikitLearn机器学习算法。分类和回归小案例,以及一些用户手册的介绍。快来和小猴子一起研习吧!
如果你在机器学习建模期间花费数小时甚至数天时间来,一直尝试挑选最佳管道和参数的过程,那么我建议你仔细阅读本文。
自动机器学习(AutoML)是指需要极少人工参与的情况下自动发现性能良好的模型用于预测建模任务的技术。
本文核心内容:TPOT是一个用于AutoML的开源库,具有scikitlearn数据准备和机器学习模型。如何使用TPOT自动发现分类任务的最佳模型。如何使用TPOT自动发现回归任务的最佳模型。TPOT简介
TreebasedPipelineOptimizationTool〔1〕,基于树的管道优化工具,简称TPOT,是一个用于在Python中执行AutoML的开源库。
TPOT使用基于树的结构来表示预测建模问题的模型管道,包括数据准备和建模算法以及模型超参数。它利用流行的ScikitLearn机器学习库进行数据转换和机器学习算法,并使用遗传编程随机全局搜索过程来有效地发现给定数据集的性能最佳的模型管道。
anevolutionaryalgorithmcalledtheTreebasedPipelineOptimizationTool(TPOT)thatautomaticallydesignsandoptimizesmachinelearningpipelines。
。。。一种称为基于树的管道优化工具(TPOT)的进化算法,可自动设计和优化机器学习管道。
然后执行优化过程以找到对给定数据集执行最佳的树结构。具体来说,一种遗传编程算法,旨在对表示为树的程序执行随机全局优化。
TPOTusesaversionofgeneticprogrammingtoautomaticallydesignandoptimizeaseriesofdatatransformationsandmachinelearningmodelsthatattempttomaximizetheclassificationaccuracyforagivensupervisedlearningdataset。
TPOT使用遗传编程的一个版本来自动设计和优化一系列数据转换和机器学习模型,这些模型试图最大限度地提高给定监督学习数据集的分类精度。
下图取自TPOT论文,展示了管道搜索所涉及的元素,包括数据清洗、特征选择、特征处理、特征构建、模型选择和超参数优化。
TPOT将通过智能探索数千条可能的管道来为你的数据找到最佳管道,从而自动化机器学习中最繁琐的部分。
机器学习管道示例
接下来我们一起看看如何安装和使用TPOT来找到一个有效的模型管道。安装和使用TPOT第一步安装TPOT库pipinstalltpot
安装后,导入库并打印版本号以确认它已成功安装:checktpotversionimporttpotprint(tpot:stpot。version)使用TPOT库很简单
需要创建TPOTRegressor或TPOTClassifier类〔2〕的实例,并做好配置后进行搜索,然后导出在数据集上找到的最佳性能的模型管道。
配置类涉及两个主要元素。
首先是如何评估模型,例如交叉验证方案和性能指标选择。建议使用选择的配置和要使用的性能指标明确指定交叉验证类。
例如要使用negmeanabsoluteerror作为回归度量,则选用RepeatedKFold〔3〕用于回归交叉验证。定义了评价步骤cvRepeatedKFold(nsplits10,nrepeats3,randomstate1)定义搜索modelTPOTRegressor(。。。scoringnegmeanabsoluteerror,cvcv)
或者使用accuracy作为分类模型的评价指标,则选用RepeatedStratifiedKFold〔4〕用于分类交叉验证。定义了评价步骤cvRepeatedStratifiedKFold(nsplits10,nrepeats3,randomstate1)定义搜索modelTPOTClassifier(。。。scoringaccuracy,cvcv)
作为一种进化算法,涉及到较为复杂的配置的设置,例如种群规模、要运行的代数以及潜在的交叉和突变率。前者重要地控制着搜索的范围;如果你对进化搜索算法不熟悉,可以将后者保留设置为默认值。
例如,100代和5或10代的适度种群规模是一个很好的起点。define搜索modelTPOTClassifier(generations5,populationsize50,。。。)
在搜索结束时,会找到性能最佳的管道。
此输出最佳模型的管道可以导出为py文件,后期可以将其复制并粘贴到你自己的项目中。输出最佳模型model。export(tpotmodel。py)TPOT分类
这里使用TPOT来发现声纳数据集的最佳模型。
声纳数据集〔5〕是一个标准的机器学习数据集,由208行数据和60个数字输入变量和一个具有两个类值的目标变量组成,例如二进制分类。
使用具有三个重复分层10折交叉验证的测试工具,朴素模型可以达到约53的准确度。性能最佳的模型可以在相同的测试工具上实现大约88的准确度。这达到了该数据集的预期性能界限。
该数据集涉及预测声纳返回是否指示岩石或矿井。summarizethesonardatasetfrompandasimportreadcsvloaddatasetdataframereadcsv(data,headerNone)splitintoinputandoutputelementsdatadataframe。valuesX,ydata〔:,:1〕,data〔:,1〕print(X。shape,y。shape)
导入数据集并将其拆分为输入和输出数据集。可以看到有60个输入变量的208行数据。
首先,我们可以定义评估模型的方法,使用RepeatedStratifiedKFold交叉验证。定义模型评估器cvRepeatedStratifiedKFold(nsplits10,nrepeats3,randomstate1)
将使用50个人口大小进行五折搜索,并设置njobs1来使用系统上的所有核心。定义搜索modelTPOTClassifier(generations5,populationsize50,cvcv,scoringaccuracy,verbosity2,randomstate1,njobs1)
最后,开始搜索并确保在运行结束时保存性能最佳的模型。执行搜索model。fit(X,y)输出最佳模型model。export(tpotsonarbestmodel。py)
这里可能需要运行几分钟,这里比较人性化的设置就是可以在命令行上看到一个进度条。
注意:你的结果可能会因算法或评估程序的随机性或数值精度的差异而有所不同。在现实案例中,可以多运行几次并比较平均结果。
将在此过程中将会输出报告性能最佳模型的准确性。Generation1CurrentbestinternalCVscore:0。8650793650793651Generation2CurrentbestinternalCVscore:0。8650793650793651Generation3CurrentbestinternalCVscore:0。8650793650793651Generation4CurrentbestinternalCVscore:0。8650793650793651Generation5CurrentbestinternalCVscore:0。8667460317460318Bestpipeline:GradientBoostingClassifier(GaussianNB(inputmatrix),learningrate0。1,maxdepth7,maxfeatures0。7000000000000001,minsamplesleaf15,minsamplessplit10,nestimators100,subsample0。9000000000000001)
这里可以看到表现最好的管道达到了大约86。6的平均准确率。这里接近该数据集上表现最好的模型了。
最后将性能最佳的管道保存到名为tpotsonarbestmodel。py的文件中。加载数据集和拟合管道的通用代码在声纳数据集上拟合最终模型并做出预测的例子frompandasimportreadcsvfromsklearn。preprocessingimportLabelEncoderfromsklearn。modelselectionimportRepeatedStratifiedKFoldfromsklearn。ensembleimportGradientBoostingClassifierfromsklearn。naivebayesimportGaussianNBfromsklearn。pipelineimportmakepipelinefromtpot。builtinsimportStackingEstimatorfromtpot。exportutilsimportsetparamrecursive导入数据集dataframereadcsv(data,headerNone)拆分为输入变量和输出变量datadataframe。valuesX,ydata〔:,:1〕,data〔:,1〕以尽量小的内存使用数据集XX。astype(float32)yLabelEncoder()。fittransform(y。astype(str))训练集上的交叉验证平均分数为:0。8667exportedpipelinemakepipeline(StackingEstimator(estimatorGaussianNB()),GradientBoostingClassifier(learningrate0。1,maxdepth7,maxfeatures0。7000000000000001,minsamplesleaf15,minsamplessplit10,nestimators100,subsample0。9000000000000001))修正了导出管道中所有步骤的随机状态setparamrecursive(exportedpipeline。steps,randomstate,1)训练模型exportedpipeline。fit(X,y)对新数据行进行预测row〔0。0200,0。0371,0。0428,0。0207,0。0954,0。0986〕yhatexportedpipeline。predict(〔row〕)print(Predicted:。3fyhat〔0〕)TPOT回归
本节使用TPOT来发现汽车保险数据集的最佳模型。
汽车保险数据集〔6〕是一个标准的机器学习数据集,由63行数据组成,一个数字输入变量和一个数字目标变量。
使用具有3次重复的分层10折交叉验证的测试工具,朴素模型可以实现约66的平均绝对误差(MAE)。性能最佳的模型可以在相同的测试工具上实现MAE约28。这达到了该数据集的预期性能界限。
过程类似于分类。加载数据集和拟合管道的通用代码拟合最终模型并在保险数据集上做出预测的例子frompandasimportreadcsvfromsklearn。modelselectionimporttraintestsplitfromsklearn。svmimportLinearSVR导入数据集dataframereadcsv(data,headerNone)拆分为输入变量和输出变量datadataframe。values以尽量小的内存使用数据集datadata。astype(float32)X,ydata〔:,:1〕,data〔:,1〕训练集上的交叉验证平均分数为:29。1476exportedpipelineLinearSVR(C1。0,dualFalse,epsilon0。0001,losssquaredepsiloninsensitive,tol0。001)修正了导出估计器中的随机状态ifhasattr(exportedpipeline,randomstate):setattr(exportedpipeline,randomstate,1)模型训练exportedpipeline。fit(X,y)对新数据行进行预测row〔108〕yhatexportedpipeline。predict(〔row〕)print(Predicted:。3fyhat〔0〕)实战案例PimaIndiansDiabetes数据集
这里有一个案例研究〔7〕,使用PimaIndiansDiabetes数据集预测5年内糖尿病的患病率。根据这项研究,作者指出在这个问题上达到的最大准确率为77。47。
在同一场景中进行自动化机器学习,看看它是如何使用TPOTAutoML工作的。importtheAutoMLpackageafterinstallingtpot。importtpot导入其他必要的包。frompandasimportreadcsvfromsklearn。preprocessingimportLabelEncoderfromsklearn。modelselectionimportStratifiedKFoldfromtpotimportTPOTClassifierimportos导入数据filepath。pimaindiansdiabetes。data。csvdfpd。readcsv(filepath,headerNone)可以用你自己的数据集。csv文件名替换df。dtypesdf。info()
将数据帧的值拆分为输入和输出特征datadf。valuesX,ydata〔:,:1〕,data〔:,1〕print(X。shape,y。shape)(768,8)(768,)XX。astype(float32)yLabelEncoder()。fittransform(y。astype(str))模型评估定义,这里使用10倍StratifiedKFoldcvStratifiedKFold(nsplits10)定义TPOTClassifiermodelTPOTClassifier(generations5,populationsize50,cvcv,scoreaccuracy,verbosity2,randomstate1,njobs1)执行最佳拟合搜索model。fit(X,y)导出最佳模型model。export(tpotdata。py)
cv10时的最佳管线选择
我还用cv5重复了上述实验。模型评估定义,这里使用5foldStratifiedKFoldcvStratifiedKFold(nsplits5)定义TPOTClassifiermodelTPOTClassifier(generations5,populationsize50,cvcv,scoreaccuracy,verbosity2,randomstate1,njobs1)搜索最佳拟合model。fit(X,y)导出最佳模型model。export(tpotdata。py)
cv5时的最佳管线选择结果
使用10折交叉验证时选择的最佳管道是:LinearSVC(inputmatrix,C5。0,dualFalse,losssquaredhinge,penaltyl1,tol0。01)Accuracy:77。47
使用5折交叉验证时选择的最佳管道是:XGBClassifier(ExtraTreesClassifier(inputmatrix,bootstrapTrue,criterionentropy,maxfeatures0。55,minsamplesleaf1,minsamplessplit2,nestimators100),learningrate0。001,maxdepth10,minchildweight13,nestimators100,njobs1,subsample0。9000000000000001,verbosity0)Accuracy:78。39TPOT和其他配置
为上述问题尝试了TPOT,它仅使用默认配置。其实AutoMLTPOT还有有许多内置配置。下面列出了这些变体:TPOTlight:如果你希望在管道中使用简单的运算符。此外,此配置确保这些运算符也可以快速执行。TPOTMDR:如果你的问题属于生物信息学研究领域,并且此配置非常适合全基因组关联研究。TPOTsparse:如果你需要适合稀疏矩阵的配置。TPOTNN:如果你想利用默认TPOT的神经网络估计器。此外,这些估计器是用PyTorch编写的。TPOTcuML:如果你的数据集大小为中型或大型,并且利用GPU加速的估计器在有限的配置上搜索最佳管道。
关于开展年终奖励绩效考核的通知通知,是运用广泛的知照性公文。用来发布法规、规章,转发上级机关、同级机关和不相隶属机关的公文,批转下级机关的公文,要求下级机关办理某项事务等。通知,一般由标题、主送单位(受文对……
五年级学生竞选红领巾广播站站长演讲稿范文尊敬的老师、亲爱的同学们:大家下午好!我是五、三班的李Xx。今天很高兴能站在这里,竞选红领巾广播站站长。广播站是学校宣传的摇篮,是师生交流的平台。我之所以竞选这个职……
超级执行力走出知道却做不到的怪圈提问几个问题回想一下自己是否有着这样的经历:明知道阅读很重要,转身却玩起了手机;明知道运动有益健康,开始了两天又没了动静;明知道高糖,高热量的东西不宜多吃,但内心总有个声……
快看!刘伟元变成灰太狼进入帕羊镇了〔呲牙〕〔呲牙〕〔呲牙〕看完刘伟元今天的骑行视频,我满脑子就一个词:灰太狼!哈哈!小哥哥听说前方目的地帕羊镇的羊肉好吃,就心心念念了一路啊!除了念叨想喝水,就是念叨……
极具创意设计的开放式耳机!塞那Z61S体验养了一身膘熬过了寒冬,春天不锻炼夏天怎么展现?工欲善其事必先利其器,要锻炼没有运动耳机怎么能够,正好塞那新出的开放式佩戴不入耳Z61S耳挂式耳机,不仅在造型上更有新意,佩戴起来……
恭喜瓦妮莎,科比迎来好消息,湖人制定重要计划,珍妮有情有义北京时间7月16日,NBA继续处于休赛期,洛杉矶湖人队的动向备受关注,湖人队正在策划如何送走威少,然而,想要接盘的球队并不多。詹姆斯和欧文眉来眼去,詹姆斯的团队连续向湖人队施压……
拒绝垃圾社交,到底有多爽?你拒绝过吗?(漫画)人与人之间实现了沟通交流,便形成一定社交圈。当然,在这个圈子里,并不是所有人都能照顾到所有人,也会被人看不起,所以,在圈子里,有喜欢你的,也有不喜欢你的。我们经常说……
布局佛山数字经济集聚区,华为腾讯等巨头为禅城带来了什么?不久前,华为(禅城)工业互联网创新中心正式启用,这是华为工业互联网项目在佛山的首度布局。不远处,从深圳来到禅城的工业互联网平台国家队华润数科,其工业互联网产业总部已开始运……
分享抗癌中药十大功劳,清热,燥湿,解毒,组方用于多种肿瘤十大功劳【品种来源】小檗科植物阔叶十大功劳的叶、茎、根。叶秋季采收,除去杂质,晒干。根全年可采,洗净晒干。鲜用随时可采。【性味】味苦、性寒。【归经】归肺、胃、……
WTA迈阿密站朱琳王欣瑜惨遭淘汰张帅郑赛赛宣告退赛WTA迈阿密1000赛:北京时间3月25日早上结束了WTA迈阿密站女单第二轮下半区的较量中国球员朱琳以46;26不敌捷克球员穆霍娃,继WTA印第安维尔斯站一轮游后,……
女排未来2大主力!朱婷难获重用,主教练人选基本已定中国女排在东京奥运会上的表现,可以说是一塌糊涂,但是对于任何一支球队来说,不可能长期保持着自己的巅峰期,有输有赢是再正常不过的了,因此很多球迷也表示非常理解中国女排现在的困境,……
30年足坛最帅阵容足球运动员球踢得好很重要,否则你就无法在世界舞台展现自己,如果长相再英俊的话,那就是明明可以靠脸吃饭,却非要靠才华吃饭了。为什么是只写这30年呢?因为时间太久远的帅哥踢球时我没……