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。