ML.NET简介:跨平台,经过验证的开源机器学习框架

ML.NET简介:跨平台,经过验证的开源机器学习框架

发布时间:2019-01-21 15:52   dotNET CoreASP.NET Core机器学习敏捷开发


ML.NET最初是由Microsoft Research开发的,并在过去十年中发展成为一个重要的框架。它在Microsoft的许多产品组(例如Windows,Bing,Azure等)中使用

在此第一个预览版本中,ML.NET启用了ML任务,例如分类(例如文本分类和情感分析)和回归(例如预测和价格预测)。除了这些ML功能之外,ML.NET的第一个版本还带来了用于训练模型的.NET API的初稿,该模型使用了预测模型,以及该框架的核心组件,例如学习算法,转换和核心。 ML数据结构。

ML.NET首先是一个框架,这意味着可以扩展它以添加流行的ML库,例如TensorFlow,Accord.NET和CNTK。我们致力于将ML.NET内部功能的完整体验带入开源ML.NET。

综上所述,ML.NET是我们致力于使ML在.NET中变得出色的承诺。

请来GitHub加入我们,并帮助塑造ML在.NET中的未来:

https://github.com/dotnet/machinelearning

随着时间的流逝,ML.NET将通过利用流行的深度学习库(如TensorFlow,Caffe2和CNTK)和通用机器学习库(如Accord.NET)来实现其他ML场景,如推荐系统,异常检测和其他方法(如深度学习)。

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

本博文的其余部分提供了有关ML.NET的更多详细信息。随时跳到最让您感兴趣的那个。

该博客由Gal Oshri,Niklas Gustafsson,Markus Weimer和Nagesh Pabbisetty合着

ML.NET核心组件

ML.NET作为.NET Foundation的一部分而启动,今天的回购包含用于模型训练和使用的.NET C#API,以及许多流行的ML任务(例如回归)所需的各种转换和学习器和分类。

ML.NET旨在提供E2E工作流,以通过预处理,功能工程,建模,评估和操作化将ML注入.NET应用程序。

ML.NET附带了对机器学习各个方面所需的类型和运行时的支持,包括核心数据类型,可扩展的管道,高性能数学,用于异构数据的数据结构,工具支持等等。

下表描述了作为ML.NET 0.1的一部分发布的组件的完整列表。

我们旨在使ML.NET的API具有通用性,以便其他框架(如CNTK,Accord.NET,TensorFlow和其他库)可以通过一个共享的API变得可用。

入门安装

要开始使用ML.NET,请使用以下命令从CLI安装ML.NET NuGet:

dotnet添加Microsoft 软件包ML 

从包管理器中:

安装- 微软ML 

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

使用ML.NET进行情感分类

训练自己的模型

这是训练情感分类模型的简单代码段(可在此处找到完整的代码段)。


var pipeline = new LearningPipeline();

pipeline.Add(new TextLoader<SentimentData>(dataPath, separator: ","));

pipeline.Add(new TextFeaturizer("Features", "SentimentText"));

pipeline.Add(new FastTreeBinaryClassifier());

pipeline.Add(new PredictedLabelColumnOriginalValueConverter(PredictedLabelColumn = "PredictedLabel"));

var model = pipeline.Train<SentimentData, SentimentPrediction>();

让我们更详细地介绍一下。我们创建了LearningPipeline,它将封装数据加载,数据处理/功能化和学习算法。这些是训练机器学习模型所需的步骤,该模型使我们能够获取输入数据并输出预测。

管道的第一部分是TextLoader,它将来自训练文件的数据加载到管道中。然后,我们使用TextFeaturizer将SentimentText列转换为称为功能的数字向量,机器学习算法可以使用它(因为它不能接受文本输入)。这是我们的预处理/功能化步骤。

FastTreeBinaryClassifier是我们将在此管道中使用的决策树学习器。像功能化步骤一样,尝试ML.NET中可用的不同学习器并更改其参数可能有助于确定更好的结果。PredictedLabelColumnOriginalValueConverter将模型的预测标签转换回其原始值/格式。

pipe.Train <SentimentData,SentimentPrediction>()训练管道(加载数据,训练特征化器和学习器)。直到发生这种情况,实验才会执行。

使用经过训练的模型进行预测


SentimentData data = new SentimentData
{
    SentimentText = "Today is a great day!"
};

SentimentPrediction prediction = model.Predict(data);

Console.WriteLine("prediction: " + prediction.Sentiment);

为了获得预测,我们对新数据使用model.Predict()请注意,输入数据是字符串,并且模型包含特征化,因此我们的管道在训练和预测期间均保持同步。我们不必专门编写用于预测的预处理/功能化代码。

有关入门的更多方案,请参阅文档演练,其中更详细地介绍了情绪分析和出租车费用预测。

前方的路

我们渴望向ML.NET添加许多功能,但是我们很想了解最适合您需求的功能。我们正在探索的当前领域是:

  • 其他ML任务和方案
  • 使用TensorFlow和CNTK进行深度学习
  • ONNX支持
  • 在Azure上横向扩展
  • 更好的GUI简化了ML任务
  • 与VS Tools的AI集成
  • .NET的语言创新

根据您的需求帮助塑造ML.NET

试试看,用它来构建一些东西,然后告诉我们ML.NET应该更擅长什么。在GitHub上提出一些问题和建议,并根据您的需求帮助构建ML.NET。

https://github.com/dotnet/machinelearning