专栏首页ATYUN订阅号MLJ:用纯JULIA开发的机器学习框架,超越机器学习管道

MLJ:用纯JULIA开发的机器学习框架,超越机器学习管道

MLJ是一个用纯Julia编写的开源机器学习工具箱,它提供了一个统一的界面,用于与目前分散在不同Julia软件包中的有监督和无监督学习模型进行交互。

MLJ旨在成为一个灵活的框架,用于组合和调整机器学习模型。

2018年12月,在早期概念验证的基础上,艾伦·图灵研究所开始了认真的开发工作。在短时间内,人们对这个项目的兴趣不断增加,现在这个项目已经成为了该研究所最受欢迎的软件存储库。

MLJ的特色

MLJ已经具备实质性的功能:

学习网络:超越传统管道的灵活模型组合。

自动调整:自动调整超参数,包括复合模型。作为与其他元算法组合的模型包装器实现调优。

模型元数据的注册表:模型元数据注册表。无需加载模型代码即可获得元数据。任务接口基础,便于模型组合。

任务界面:自动将模型与指定的学习任务相匹配,以简化基准测试和模型选择。

纯净的概率API:改进了对贝叶斯统计和概率图形模型的支持。

数据容器不可知:以你喜欢的Tables.jl格式显示并操作数据。

普遍采用分类数据类型:使模型实现能够正确地考虑训练中看到的类而不是评估中的类。

团队计划在不久的将来进行增强,包括Flux.jl深度学习模型的集成,以及使用自动微分的连续超参数的梯度下降调整。

虽然目前实现MLJ接口的机器学习模型相对较少,但正在进行的工作旨在将流行的python框架scikit-learn支持的模型封装起来,这是临时的权宜之计。

学习网络

MLJ的模型组合界面足够灵活,可以实现如数据科学竞赛中流行的模型堆栈。为了处理这种示例,界面设计必须考虑到预测和训练模式中的信息流是不同的这一事实。这可以从以下简单的双模型堆栈的示意图中看出,它被视为一个网络:

为何选择MLJ而不是ScitkitLearn.jl

为Julia用户提供的另一种机器学习工具箱是ScikitLearn.jl,最初用作流行的python库scikit-learn的Julia包装器,用Julia编写的ML算法也可以实现ScikitLearn.jl API。然而,元算法(系统调优,流水线等)仍然是python包装代码。

虽然ScitkiLearn.jl为Julia用户提供了对成熟且庞大的机器学习模型库的访问,但是scikit-learn API可以追溯到2007年,而且在未来可能不会发生重大变化。MLJ享有一些特性,从长远来看,它会成为一个更有吸引力的选择:

单一语言:ScikitLearn.jl包装了python代码,后者又为性能关键的例程包装了C代码。实现MLJ模型界面的Julia机器学习算法是100%纯Julia。在Julia中编写代码几乎与python一样快,编写良好的Julia代码运行速度几乎与C一样快。此外,单一语言设计提供了卓越的互操作性。例如,可以使用自动微分库(例如Flux.jl)实现:(i)超参数的梯度下降调优;(ii)使用CuArrays.jl,GPU性能提升而无需重大的代码重构。

模型元数据的注册表:在ScikitLearn.jl中,必须从文档中收集可用模型的列表,以及模型元数据(模型是否处理分类输入,是否可以进行概率预测等)。在MLJ中,这些信息更加结构化,MLJ可通过外部模型注册表访问(无需加载模型)。这形成了“任务”界面的基础,并促进了模型组合。

任务界面:一旦MLJ用户指定“任务”(例如“基于特征x,y,z进行房屋价值的概率预测”),则MLJ可以自动搜索匹配该任务的模型,从而协助系统进行基准测试和模型选择。

灵活的API用于模型组合:scikit-learn中的管道更像是一种事后的想法,而不是原始设计中不可或缺的部分。相比之下,MLJ的用户交互API基于灵活的“学习网络”API的要求,该API允许模型以基本上任意的方式连接(包括目标变换和逆变换)。在作为一流的独立模型导出之前,可以分阶段构建和测试网络。网络具有“智能”训练(在参数更改后仅重新训练必要的组件),并且最终将使用DAG调度程序进行训练。在Julia的元编程功能的帮助下,构建通用架构(如线性流水线和堆栈)将是单线操作。

纯净的概率API:scikit-learn API没有为概率预测的形式指定通用标准。通过沿着skpro项目的路线修复概率API ,MLJ旨在改进对贝叶斯统计和概率图形模型的支持。

普遍采用分类数据类型:Python的科学数组库NumPy没有用于表示分类数据的专用数据类型(即,没有跟踪所有池的类型可能的课程)。通常,scikit-learn模型通过要求将数据重新标记为整数来处理此问题。然而,用户在重新标记的分类数据上训练模型只是为了发现对测试集的评估,却使代码崩溃,因为分类特征具有在训练中未观察到的值。而MLJ通过坚持使用分类数据类型并坚持MLJ模型实现保留类池来缓解此类问题。例如,如果训练目标包含池中实际上不出现在训练集中的类,则概率预测将预测其支持包括缺失类,但是以概率零适当加权的分布。

资源

开源:

github.com/alan-turing-institute/MLJ.jl

项目详情:

alan-turing-institute.github.io/MLJ.jl/dev/

演示视频(从21’39起):

www.youtube.com/watch?v=CfHkjNmj1eE

建立一个自我调整的随机森林:

github.com/alan-turing-institute/MLJ.jl/blob/master/examples/random_forest.ipynb

贡献:

github.com/alan-turing-institute/MLJ.jl/blob/master/CONTRIBUTE.md

End

本文分享自微信公众号 - ATYUN订阅号(atyun_com),作者:关注人工智能的

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-05-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 学会判断机器学习模型的性能——开发基线模型技能

    这是初学者常问到的问题。作为一个初学者,你经常会去寻找这个问题的答案,比如你希望别人为你解答,x%的准确性或者x的误差分数是否有效。这篇文章将告诉你如何自己来回...

    AiTechYun
  • OpenAI提出比GAN更具优势的可逆生成模型Glow

    Glow,一种使用可逆1×1卷积的可逆生成模型。它扩展了以前的可逆生成模型,简化了架构。模型可以生成逼真的高分辨率图像,支持高效采样,并发现可用于操纵数据属性的...

    AiTechYun
  • Xnor推出了AI2Go平台,动动手指即可获取自定义边缘AI模型

    Xnor.ai今天推出了AI2Go平台,该平台允许开发者和制造商为设备上的人工智能优化预先构建的AI模型。AI2Go专为相机、无人机和传感器等设备中的最先进边缘...

    AiTechYun
  • 一篇值得悟一悟的机器学习模型应用之道

    当你有了一个相当不错的模型结果了,这个时间就需要上线应用了,但实际上这个过程也是需要注意很多东西的呢,比如汇报你的项目结果、上线计划沟通、上线后的监控等等,都是...

    Sam Gor
  • Machine Learning-模型结果的应用之道

    当你有了一个相当不错的模型结果了,这个时间就需要上线应用了,但实际上这个过程也是需要注意很多东西的呢,比如汇报你的项目结果、上线计划沟通、上线后的监控等等,都是...

    Sam Gor
  • ACL 2020 | 用BERT解决表格问答任务,谷歌提出弱监督表格解析器TaPas

    世上许多信息都是以表格形式存储的,这些表格见诸于网络、数据库或文件中。它们包括消费产品的技术规格、金融和国家发展统计数据、体育赛事结果等等。目前,要想找到问题的...

    机器之心
  • ACL 2020 | 用BERT解决表格问答任务,谷歌提出弱监督表格解析器TaPas

    世上许多信息都是以表格形式存储的,这些表格见诸于网络、数据库或文件中。它们包括消费产品的技术规格、金融和国家发展统计数据、体育赛事结果等等。目前,要想找到问题的...

    代码医生工作室
  • 基于时间和地域构建一个网络诈骗形势模型

    电信诈骗,网络诈骗层出不穷,花样翻新,是当前公安部重点打击的对象。本文从网络中爬取相关的新闻,通过对时域和数量的统计与分析,实现对网络诈骗模型中时间参量的优化,...

    FB客服
  • CIKM AnalytiCup 2018 冠军方案出炉,看他们构造模型的诀窍

    AI 科技评论按:CIKM AnalytiCup 2018(阿里小蜜机器人跨语言短文本匹配算法竞赛)近日落幕,由微软罗志鹏、微软孙浩,北京大学黄坚强,华中科技大...

    AI科技评论
  • 一文读懂二元分类模型评估指标

    在分类模型中,有很多关于模型性能的评估指标(evaluation metric),比如 accuracy、precision、recall、f1-score、r...

    abs_zero

扫码关注云+社区

领取腾讯云代金券