炼数成金 门户 商业智能 深度学习 查看内容

微软开源 ML.NET:一款跨平台、成熟的机器学习框架

2018-5-10 10:11| 发布者: 炼数成金_小数| 查看: 13044| 评论: 0|来自: 云头条

摘要: 微软在Build 2018大会上兴奋地宣布了ML.NET的预览版,这是一种跨平台的开源机器学习框架。ML.NET将让广大.NET开发人员可以开发自己的模型,并且将自定义的机器学习融入到其应用程序中,无需之前拥有开发或调整机器学 ...

工具 模型 机器学习 框架 微软

微软在Build 2018大会上兴奋地宣布了ML.NET的预览版,这是一种跨平台的开源机器学习框架。ML.NET将让广大.NET开发人员可以开发自己的模型,并且将自定义的机器学习融入到其应用程序中,无需之前拥有开发或调整机器学习模型方面的专业知识。

ML.NET最初是在微软研究中心开发而它的,在过去的十年已发展成为一种重要的框架;它用于微软的许多产品组合中,比如Windows、Bing和Azure等。

有了这第一个预览版,ML.NET能够支持诸多机器学习任务,比如说分类(比如文本分类和情绪分析)以及回归(比如趋势预测和价格预测)。除了这些机器学习功能外,ML.NET的这第一个版本还引入了训练模型的.NET API初稿,使用模型用于预测,还包括该框架的核心组件,比如学习算法、转换和核心的机器学习数据结构。

ML.NET首先是一个框架,这意味着它经扩展后可以添加流行的机器学习库,比如TensorFlow、Accord.NET和CNTK。我们致力于将开发ML.NET的内部功能方面的全部经验带给开源界的ML.NET。

综上所述,ML.NET代表了我们致力于通过.NET让机器学习变得很出色。

随着时间的推移,ML.NET将充分利用流行的深度学习库(比如TensorFlow、Caffe2和CNTK)以及一般的机器学习库(比如Accord.NET),从而支持其他机器学习场景,比如推荐系统、异常检测及其他方法(比如深度学习)。

ML.NET还允许采用代码优先的方法,补充了Azure机器学习和认知服务提供的体验,并支持应用程序本地部署以及自行构建模型的功能。

ML.NET核心组件
ML.NET作为.NET Foundation的一部分而发布;今天的代码仓库包含用于模型训练和使用的.NET C# API,以及许多常见的机器学习任务(如回归和分类)所需要的各种转换和学习器。

ML.NET旨在提供E2E工作流程,以便在预处理、特征工程、建模、评估和操作化等过程中将机器学习融入到.NET应用程序中。

ML.NET本身支持机器学习各方面所需要的类型和运行时环境,包括核心数据类型、可扩展流水线、高性能数学、面向异构数据的数据结构和工具支持等。

下面这张表显示了作为ML.NET 0.1的一部分发布的完整组件列表。


我们旨在让ML.NET的API具有通用性,那样CNTK、Accord.NET和TensorFlow等其他框架以及其他库就可以通过单一的共享式API来加以使用。

安装入门
想开始使用ML.NET,请使用下列命令从CLI来安装ML.NETNuGet:


从软件包管理器来安装:


您可以直接从https://github.com/dotnet/machinelearning来构建框架。

借助ML.NET实现情绪分类

训练您自己的模型
这个简单的代码片段用来训练情绪分类模型(完整的代码片段可在此:https://github.com/dotnet/machinelearning/blob/master/test/Microsoft.ML.Tests/Scenarios/Scenario3_SentimentPrediction.cs找到)。


让我们更详细地讨论这个方面。我们创建了一个LearningPipeline,它将负责封装数据加载、数据处理/特征化和学习算法。这些是训练机器学习模型所需要的几个步骤,该模型让我们得以拿来输入数据后输出预测结果。

这条流水线的第一部分是TextLoader,它将来自我们训练文件的数据加载到流水线。然后,我们使用TextFeaturizer将SentimentText列转换成名为Features的数字向量,该数字向量可以被机器学习算法所使用(因为它无法接受文本输入)。这是我们的预处理/特征化步骤。

FastTreeBinaryClassifier是我们将用于该流水线中的决策树学习器。就像特征化步骤那样,尝试ML.NET中不同的学习器并更改其参数有望找到更好的结果。 PredictedLabelColumnOriginalValueConverter将模型的预测标签转换回成原始值/格式。

pipeline.Train<SentimentData,SentimentPrediction>()训练流水线(加载数据、训练特征器和学习器)。直到这一步发生后,才执行试验。

将经过训练的模型用于预测


为了得到预测结果,我们对新数据使用model.Predict()。请注意,输入数据是一个字符串,模型包含特征化,所以我们的流水线在训练和预测期间都保持同步。我们不必编写专门用于预测的预处理/特征化代码。

前方的道路
我们渴望将许多功能添加到ML.NET中,但我们很想了解哪些功能最适合您的要求。目前我们正在探索的领域包括:

另外的机器学习任务和场景
使用TensorFlow和CNTK的深度学习
ONNX支持
在Azure上横向扩展
更好的GUI,以简化机器学习任务
与VS工具集成,用于AI
针对.NET的语言创新

欢迎加入本站公开兴趣群
商业智能与数据分析群
兴趣范围包括各种让数据产生价值的办法,实际应用案例分享与讨论,分析工具,ETL工具,数据仓库,数据挖掘工具,报表系统等全方位知识
QQ群:81035754

鲜花

握手

雷人

路过

鸡蛋

相关阅读

最新评论

热门频道

  • 大数据
  • 商业智能
  • 量化投资
  • 科学探索
  • 创业

即将开课

 

GMT+8, 2018-11-16 12:10 , Processed in 0.153467 second(s), 24 queries .