在我参与数据挖掘和机器学习竞赛的这些年里,我一直都在思考如何自动化我的参与过程。也许这恰恰说明,我更想解决构建工具的问题,而不是解决手头的问题。
在处理数据集时,我通常会花费不成比例的时间来思考算法调优和运行调优实验。我倾向于进行赛后分析,并对我的时间分配感到后悔,几乎总是觉得有更多的时间可以投入到特征工程、探索不同的模型和假设以及集成学习中。
地狱般的自动机器学习器
我曾不止一次地构想过一个“完美”的系统,其中模型运行、调优和结果集成都是自动化的,而人力则专注于从不同角度定义问题。
我甚至在几年前用几种不同的语言为竞赛构建过这个系统的非完美版本。第一个版本是用 Java 编写的,距今已有十年了。最近的版本是在大约六个月前使用 R 语言、Makefile 和 bash 脚本编写的。
系统设计
每次看起来都像一个管道,我通过克服前一次迭代的致命错误来改进它。管道设计的要点如下:
- 原始数据:原始数据源(数据库访问)或文件
- 数据视图:通过查询或平面文件定义的问题视图
- 数据分区:将数据视图划分为交叉验证折、训练/测试折以及评估模型和进行竞赛预测所需的任何其他折。
- 分析报告:使用描述性统计和图表对数据视图进行汇总。
- 模型:机器学习算法和配置,它们与输入数据一起用于及时构建模型。
- 模型输出:所有数据视图的所有数据分区的模型原始结果。
- 集成:集成算法和配置,旨在为所有数据视图的所有数据分区创建模型输出的集成。
- 记分板:本地记分板,描述所有已完成的运行及其分数,可进行排序和汇总。
- 预测:可提交的预测,用于上传到竞赛排行榜等。
该系统专注于分类和回归问题,因为我接触到的大多数问题都可以简化为此类问题。
通过这种模型,操作员将大部分时间花在定义新的数据视图以插入“数据视图”部分。这些是人工定义或智能自动化的描述问题以供算法使用的方式。可以创建自动视图,例如来自特征选择算法的特征,以及属性的标准化、归一化、平方等转换。
它是数据驱动或配置驱动的。例如,“运行”是算法配置与数据视图的组合。如果该组合的结果尚不存在,则在下次运行时创建。报告、集成、预测等也是如此。这提供了自然的检查点,并且在任何时候,“系统”的状态都由从已定义的配置中创建的工作产品定义。我最近用磁盘上的文件对此进行了建模,但同样可以轻松地在数据库中进行建模。
系统优势
如前所述,管道设计旨在让计算机专注于自动化流程,从而让操作员专注于提出问题的新视角。该方法的一些好处包括:
- 算法经常失败,因此能够修复、调整和重新运行它们非常重要。
- 竞赛中的限制因素通常是问题的新视角,而不是 CPU 时间或算法调优。持续集成系统可以整天重新运行主脚本,寻找要集成的新结果、要使用的新配置、要推广的新集成。
- 该设计允许以新的数据视图和新的模型配置文件形式随意添加想法。
可以向“分析报告”部分添加其他报告,其结果旨在激发“数据视图”部分的新想法。
新的模型以算法和算法配置的形式添加到“模型”部分。您可以非常快速地构建标准算法和算法标准配置文件的语料库。算法参数的网格搜索和随机搜索可以批量添加新配置,或作为搜索过程的结果。
它是可插拔的,您可以看到如何不断向框架添加内容,使经验教训跨项目聚合。我的愿景是让该框架成为公共开源项目,并快速积累各个级别的算法和报告,利用多个机器学习库并根据需要分发计算基础架构。
徒劳的努力
如上所述,该系统是一个诱人的陷阱。它放弃了为数据问题设计解决方案的责任。放弃根据领域知识和专业知识智能选择属性和算法的责任。它将问题视为一个搜索问题,并释放 CPU 资源。
我认为构建此系统的生产级版本是一种徒劳的努力。我这么认为是因为它是为解决一个人为的问题而设计的:机器学习竞赛。
我大部分时间都这么认为,大约 99.99%。但我一直在探索这个想法,以防我错了。这篇文章就是我突破这一信念界限的一个例子。
如果我描述的系统存在,我会使用它,还是仍然想自己构建一个版本?你会怎么做?
机器学习即服务 (MLaaS)
我认为此类系统的变体确实存在,或者为了争论起见,我可以欺骗自己认为它存在。我认为这种愿景的面向业务的版本已经存在,它就是商品化机器学习或机器学习即服务 (MLaaS)。
我上面描述的系统专注于一个问题:给定一个数据集,可以生成哪些最佳预测?Google Prediction API 可以作为此类系统的示例(如果我闭上一只眼,然后用另一只眼眯起来)。我不在乎如何获得最佳结果(或足够好的结果),我只想拿到它们。
我将此与所谓的“面向业务的”MLaaS 区分开来。我认为 BigML 就是此类服务的典范。它们正是我设想中的此类服务,如果它们经过精心包装后销售给企业的话。一个关键的区分点是模型内省的能力,尽管这会牺牲预测的准确性。
您不仅仅想要“有史以来最好的预测”,您还想知道它是如何实现的。数字需要围绕它们的故事。企业需要这些信息,以便它们能够内化这些信息并将其转移到其他问题上,或者在概念发生变化后转移到当前问题上。这种知识才是关键,而不是创建知识的模型。
我认为这也解释了为什么机器学习竞赛对相关企业来说结果有限。充其量,竞赛结果可以将新的方法和流程思想注入企业,但实际的预测甚至实际的模型都是一次性的。
黑盒机器学习
黑盒机器学习可能有一席之地,那就是模型无关紧要的问题。一个想到的例子是赌博(如赛马或股票市场)。模型无关紧要,因为它们很快就会过时。因此,只有下一批预测和构建模型的过程才最重要。
我认为黑盒机器学习就像自动编程一样。自动编程可以为您提供解决已定义问题的程序,但您不知道该程序内部有多么糟糕,而且您可能不想知道。这种想法对程序员来说是令人反感的,原因与一个神奇的黑盒机器学习系统对机器学习从业者(数据科学家?)的看法相同。对于大多数问题来说,细节、实现方式非常重要。
更新:继续在 reddit 和 datatau 上讨论。
我从来没有像这样不同意一篇博文。
期待听到你的想法。
很棒的博文。它阐明了 ML 领域鲜为人知的领域。我认为这是一个趋势,因为一些数据科学家没有扎实的编程背景。
作为一名分析师,我一直认为黑盒模型对我的用处有限,因为它们无法解释,也不会向我公开它们的知识。这发生在我开始自己探索机器学习世界之前。
我现在开始相信,只要你能打开黑盒模型,它就是可以接受的。这可以通过敏感性分析/模拟来实现。最终,我工作的公司并不关心预测本身,它们想知道它们可以操纵哪些杠杆,并能够围绕拉动这些杠杆的测试形成假设。
这就是我作为一名初学者从业者开始接触机器学习的方式,我坚信模型仅仅是一个供我运行模拟的平台,例如:如果我们把 x 提高 10%,或者客户多做 y 5%,那么我们期望的结果 z 可能会增加 3-10%。
与上述方法相比,机器学习社区的准确性驱动性之高让我感到惊讶。你对这个有什么看法,Jason?
我可能来晚了,但迟到总比不到好!我完全同意 Jason 的观点!如果 Jason 提到的某些好处不那么重要,那么就请继续采用银元模式;雇佣和解雇!
为什么我们需要除了黑盒模型/预测之外的东西?
我们需要:
1. 构建理论
2. 改进实践
3. 处方性
4. 建立信任
5. 等等……
模型是特定目的的表示——它的价值远不止“预测”。单纯的预测本身可能不总是企业最终的必需品。例如,理解“因果关系”可能比实际预测更有信息量。但为了理解因果关系,你需要的不只是算法的黑盒知识。例如,算法的潜在假设或搜索行为——简而言之,算法如何做出给定决策很重要!这就需要解码算法,理解底层数学等……
谢谢 Ed。
我看到了黑盒机器学习系统的用处,就像网页构建器一样,例如 Wix、WordPress.com 或 Square Space:如果你的需求可以在严格的界限内得到满足,那么你就可以继续。但如果你需要更多的实验空间或洞察力,你将不得不实施自定义解决方案。
思考它的有趣方式。
先生,请告诉我网格搜索优化后,深度学习的性能如何进一步提高?
是的,请看这个
https://machinelearning.org.cn/start-here/#better