如果一个机器学习初学者,仅用三行代码就训练了一个模型,并且模型的性能要比从业数十年的都要好,这是一种什么样的感觉?
AutoGluon就能帮你梦想成真。
上面这张图片就是AutoGluon的工作流,多么简单啊!根据数据类型(问题定义)实例化任务,仅通过一个fit函数就完成了训练过程,仅通过一个predict函数就完成了对新数据的预测过程。
那么,模型,损失函数,优化器,超参数的选择哪去了?
所有这一切AutoGluon都帮你做了。
我之前介绍过微软的NNI,同样是AutoML工具,为什么还要介绍AutoGluon呢?
因为NNI不够亲民。
来看一下NNI是如何进行超参数搜索的?
Step1:准备模型
Step2:定义搜索空间
Step3:配置实验
配置实验代码
配置搜索空间
配置微调算法
配置实验次数
Step4:开始实验
实验可以理解为一个超参数搜索过程,为什么说它不够亲民呢?
第一步你需要自己选择模型,可我是个初学者,我咋知道选择什么模型?我甚至连模型是啥都不知道,就算有点经验的人,在是选择传统的机器学习还是神经网络方面也会犯糊涂,毕竟,就连吴恩达老师在这个问题上都承认犯过错误。
可见,选择多了也不是什么好事。
可这还没完,接下来你仍然要面临选择,例如,传统机器学习中能完成分类任务的也不止一个,有基于树的分类器:决策树,提升树,贝叶斯分类器,逻辑回归,SVM等等。
神经网络中也有卷积神经网络CNN,前馈神经网络类ANN以及循环神经网络RNN,仍然要面临类似的选择问题,例如,对于NLP任务,大家首先想到的是RNN,但你可知道CNN也能完成同样的任务。
第二步你需要自己定义搜索空间,空间定义大了,搜索过程会慢,定义小了会错过最优解,甚至连划分粒度都得小心翼翼。
第三步中你需要自己定义搜索算法,是选择基于贝叶斯优化的搜索算法还是强化学习的搜索算法?虽然是个选择题,可是选择哪个鬼真是一点思路都没有啊!
。。。
之前对NNI的一顿吹真是啪啪打自己的脸?
总结来说,不是NNI不好,而是NNI需要有一定的经验和基础。
封装程度
NNI的问题在AutoGluon中三行代码就搞定了。
可见,AutoGluon的封装程度很高。什么是封装程度呢?
举个例子,要使用GPU的并行计算能力。
你是个软件工程师,不想触碰硬件,显卡驱动代替你与硬件交流,你就不用读硬件手册,不用了解寄存器或者总线地址什么的了。
可你仍然不想内核编程,所以CUDA出现了,CUDA代替你与驱动交流,你就不用去了解系统调用等复杂的API了。
可是面对浩如烟海的CUDA API仍然令人头疼,所以机器学习框架代替你与CUDA交流,你只需要一句话device=“gpu”就用上并行计算了。
但封装程度越高,也就意味着可控程度越低。
如何使用AutoGluon?
使用AutoGluon,你的工作重心就一个:选择任务类型。
每一个任务类型都有两个重要的角色:DataSet和Predictor。前者用于处理数据,后者用于拟合模型。
在AutoGluon中有三种任务类型。表格任务,多模态任务,以及时序任务。
表格任务
机器学习界的hello world想必你肯定知道吧,加利福尼亚房价预测,也就是输入房屋的面积,房间数,是否邻街道等等特征,输出预测的房价。
我们通常把这种类型的数据称为表格数据。
能处理表格数据的任务就是表格任务。对应的DataSet和Predictor为TabularDataset和TabularPredictor。
来看一个具体的例子:
使用TabularDataset加载数据,可以加载网络数据也可以加载本地数据。
重要的是,你不需要进行数据预处理操作,AutoGluon会帮你数据清理,归一化,异常值处理等操作。
除此之外,还可以输出数据的统计信息。
label = 'signature'指定输出列,这很重要,因为后续要根据这个选择模型,之后就可以模型训练了。
虽然一行代码就搞定了。但通过日志可知它背着我们做了很多事。
通过日志可知,它首先进行特征工程,根据输出列数据类型判断是分类任务还是回归任务,然后训练了多个模型,并将多个模型集成到一起作为最终模型。
同样一行代码就完成了新数据的预测。
多模态任务
MultiModalPredictor包含各种深度学习模型,用于处理多模态输入,例如,图像,文本,表格数据。
AutoGluon能自动识别数据类型,例如,AutoGluon的多模态数据格式要求,图像列应包含一个字符串,该字符串的值为指向单个图像文件的路径。
举个例子,根据宠物的文本描述,体重等表格特征,以及宠物的图片来预测宠物的被收养率。
解压数据
使用pandas读取CSV文件,并转换成DataFrame格式,指定输出列。
将图像列转换为标准路径格式。
开始训练
根据日志可知AutoGluon选择了MultimodalFusionMLP模型,也就是将提取的图像特征,文本特征以及表格特征拼接到一起,然后送入MLP网络。
因为输出的是概率,所以选择了交叉熵损失函数。
时序任务
时序任务的对应的DataSet和Predictor为TimeSeriesDataFrame和TimeSeriesPredictor。
例如,用AutoGluon预测未来某个时间的股票值。
加载数据
转换为TimeSeriesDataFrame格式
target为输出列。
模型训练
AutoGluon会训练多个模型,并按照性能排序。