全文共3101字,预计学习时长6分钟算法
猫和老鼠,第70集——机器猫(1952)微信
平常工做中,我常常用到AutoML(Automated Machine Learning,自动机器学习),在参加ML竞赛时,也用过几回AutoML来辅助主模型,还参加过两次AutoML竞赛。我认为,AutoML自动化建模过程的想法是很棒的,但这一领域其实被吹吹捧得言过其实了。在将来,一些重要概念,如特征工程、元学习超参优化,能够释放AutoML的潜能;可是目前,一站式的AutoML做为一种工具,只会徒增开销。网络
下文提到的全部数据和操做都是关于表格数据的。机器学习
数据科学项目工具
数据科学项目包括几个基本步骤:从商业角度提出问题(选择任务和成功与否的指标)、收集数据(收集、清理、探索)、建模及评估模型性能,以及在生产环境中应用模型并观察其性能。性能
数据挖掘跨行业标准流程学习
该流程的每一部分都对项目的成功相当重要。然而,机器学习专家认为,建模过程是最基本的。设计良好的机器学习模型能够为公司带来不少潜在价值。测试
给定一个数据集和目标(特定指标值越大越好),数据科学家须要在建模过程当中解决优化问题。这一过程很是复杂,须要多种技巧:优化
1. 须要将特征工程看成一种艺术,而不只仅是一门科学;编码
2. 优化超参须要深入理解算法和ML核心概念;
3. 须要运用软件工程技术来输出简洁易懂、便于应用的代码。
此时,AutoML就能派上用场了。
ML建模既是一种艺术,也是一门科学,仍是软件工程。
AutoML
AutoML的输入是数据和任务(分类、回归、推荐等),输出则是生产就绪、能预测未知数据的模型。数据驱动管道的每个决策都是一个超参。AutoML的关键在于找到可以在合理时间内给出良好分数的超参。
• AutoML用于数据预处理的方法:如何处理数据不平衡;如何填补空值;移除、替代或保留异常值;如何给类别和多个类别列编码;如何避免目标泄露;如何避免内存错误等等;
• AutoML生成并选出有意义的新特征;
• AutoML选择模型(线性模型、K-Nearest Neighbors、Gradient Boosting、神经网络等);
• AutoML调节所选模型的超参(如,树模型中数的数量和子采样的数量、神经网络中的学习率和epoch数);
• 有条件的话,AutoML能够生成一组稳定的模型集合来提升分数。
AutoML发展动力
AutoML将会填补数据科学市场中“供给”和“需求”之间的空白
如今,愈来愈多的公司要么刚开始收集数据,要么想要从已收集的数据中获取潜在价值——他们都想从中分一杯羹。然而,可以知足公司需求、具备相关经验的数据科学家却不多。市场供需不平衡,缺口扩大。AutoML刚好能够填补这一空缺。
可是AutoML这种一站式的解决方案可否给公司创造价值呢?在我看来,答案是否认的。
这些公司须要的是一个过程,而AutoML仅仅是一个工具。工具上的先进弥补不了战略上的缺失。在开始使用AutoML前,能够先考虑和咨询公司合做,制定一个数据科学战略。这也是为何大部分AutoML供应商不只提供解决方案,还提供咨询的缘由。这其中很有技巧。
看起来并非一个好计划(《南方公园》,s2e17)
AutoML能够帮助数据科学团队节省时间
根据2018年Kaggle机器学习和数据科学调查报告,一个普通的数据科学项目,其15%-26%的时间会花在建模或选择模型过程上。这一过程既要求人力,又要求计算时间。一旦目标或数据发生变更(好比说增长了新的特征),则须要再重复一遍该过程。而AutoML能够帮助数据科学家节省这一时间,从而把时间放在更重要的事情上(如椅上击剑)。
只需几行代码就可使用AutoML
若是一家公司的数据科学团队说建模并非他们最重要的任务,那么这家公司的数据科学过程显然是有问题的。一般,模型性能的一点点提高就能为公司带来巨大利益。这样一来,在建模上花的时间是很是有意义的。
Oversimplified rules:if (Gain from model > Costs of DS team time) → Time savings are not needed.
if (Gain from model <= Costs of DS team time) → Are you solving the right problem?
写下数据科学团队每日任务的脚本,能够在未来节省时间,比使用一站式的解决方案要好得多。我已经写了一些用于自动化平常任务的脚本,包括自动化特征生成、特征筛选、模型训练、超参调节等,如今天天都会用到。
AutoML表现优于普通数据科学家
不幸的是,除了开源AutoML基准,咱们没有任何可以有效比较表格AutoML和人类数据科学家的基准。2019年7月1日,也就是几个月前,几位做者发表了一篇文章,比较了调参后的随机森林和几个AutoML库的性能。其结果以下图所示:
出于好奇,我决定制定本身的基准。我将个人模型的性能和AutoML解决方法进行了比较,使用了三个二分类数据集,包括信用数据、KDD促销数据和按揭贷款数据。随机将每一个数据集中的60%分为训练集(按目标分层),剩下40%为测试集。
个人基础模型很是简单,既没有深刻挖掘数据,也没有建立高级特征:
1. 5折StratifiedKFold;
2. 对分类列使用Catboost Encoder(不熟悉Catboost Encoder的读者能够先参考我之前的文章:分类编码基准);
3. 对数值列对使用数学操做(+-*/)。新特征限制为500。
4. 模型为LightGBM,使用默认参数;
5. 融合OOF排序预测。
我使用了两个AutoML标准库:H2O和TPOT,并使用多个时间间隔对它们进行训练,从15分钟到6小时不等,结果很是使人惊讶。衡量指标以下:
Score = (ROC AUC / ROC AUC of my baseline) * 100%
首先,几乎在全部状况下,个人基础模型都完胜AutoML。这让我有点失望,毕竟我原本还打算让AutoML干脏活累活,我能趁机放松一下。可是看样子也没法实现了。
其次,随着训练间隔时间的增加,AutoML的分数并无提升。这意味着无论咱们等多久,15分钟也好,6小时也罢,获得的分数都是同样的低。
AutoML并不总能获得高分。
总结
1. 若是公司是第一次接触数据科学,建议聘请一个咨询师。
2. 尽量使工做自动化。
3. 一站式解决方案并非个好的选择——它的分数过低了。
PS:别把引擎当汽车
这篇文章讲的是工具,可是咱们也须要意识到,建模只是整个数据科学项目管道的一部分。我以为将项目类比为汽车很是贴切。这样一来,建模的输出——也就是机器学习模型——就能够看做是汽车引擎。
毫无疑问,引擎是汽车最基本的组件,但它并不能表明一辆车。若是忽视了其余部分,那么花再多时间在创造高端、周到、复杂的特征、选择神经网络结构或调节模型参数上,也是徒劳无功的。
若是解决问题的方向是错的(从商业角度理解),或者数据有误差须要从新训练(数据探索),又或者模型太复杂,不能用于生产(应用阶段),那么就算模型可以取得很高的分数,也没法用于实践。
到最后,你可能会发现本身处在一个很愚蠢的情境下:在花了很多天或数周,辛辛苦苦完成建模以后,你骑的是一辆车篮里装着汽车引擎的慢吞吞的自行车。
工具是基础;战略是关键。
推荐阅读专题
留言 点赞 关注
咱们一块儿分享AI学习与发展的干货
欢迎关注全平台AI垂类自媒体 “读芯术”
(添加小编微信:dxsxbb,加入读者圈,一块儿讨论最新鲜的人工智能科技哦~)