ML.NET是一个面向.NET开发者的开源、跨平台的机器学习框架,能够将定制的机器学习整合到.NET应用程序中。
我们很高兴向大家介绍我们在过去几个月里的工作情况。
AutoML更新
训练机器学习模型是一项耗时且反复的工作。自动机器学习(AutoML)将这一过程自动化,使其更容易找到适合你的场景和数据集的最佳算法。AutoML是为Model Builder和ML.NET CLI中的训练体验提供动力的后端。去年,我们宣布了对Model Builder和ML.NET CLI工具中的AutoML实施的更新,该更新基于微软研究院的神经网络智能(NNI)和快速轻量级AutoML(FLAML)技术。与以前的解决方案相比,这些更新提供了一些好处和改进,其中包括:
- 增加探索的模型数量。
- 改进了超时错误率。
- 改进了性能指标(例如准确性和R-squared)。
直到最近,你只能在我们的工具中利用这些AutoML的改进。
我们很高兴地宣布,我们已经将AutoML的NNI/FLAML实现集成到ML.NET框架中,因此你可以从代码优先的经验中使用它们。
要想今天就开始使用AutoML API,请使用ML.NET的日常馈送安装最新的预发布版本的Microsoft.ML 和Microsoft.ML.Auto NuGet软件包:
https://pkgs.dev.azure.com/dnceng/public/_packaging/MachineLearning/nuget/v3/index.json
实验API
一个实验是一个训练运行或试验的集合。每个试验都会产生关于自身的信息,例如:
- 评估指标。用于评估一个模型的预测能力的指标。
- 管线。用于训练一个模型的算法和超参数。
实验API为你提供了一套AutoML的默认值,使你更简单地添加到你的训练管道中。
// Configure AutoML pipeline
var experimentPipeline =
dataPrepPipeline
.Append(mlContext.Auto().Regression(labelColumnName: "fare_amount"));
// Configure experiment
var experiment = mlContext.Auto().CreateExperiment()
.SetPipeline(experimentPipeline)
.SetTrainingTimeInSeconds(50)
.SetDataset(trainTestSplit.TrainSet, validateTestSplit.TrainSet)
.SetEvaluateMetric(RegressionMetric.RSquared, "fare_amount", "Score");
// Run experiment
var result = await experiment.Run();
在这个代码片段中,dataPrepPipeline 是一系列的转换,将数据转换成正确的格式进行训练。训练回归模型的AutoML组件被添加到该管道中。同样的概念适用于其他支持的场景,如分类。
当你用你定义的训练管道创建一个实验时,你可以自定义的设置包括你训练多长时间、训练和验证集,以及你要优化的评估指标。
一旦你的管道和实验被定义,调用Run 方法来开始训练。
搜索空间和可扫除估计器
如果你需要对超参数搜索空间进行更多的控制,你可以定义你的搜索空间,并使用可扫除估计器将其添加到你的训练管道。
// Configure Search Space
var searchSpace = new SearchSpace<LgbmOption>();
// Initialize estimator pipeline
var sweepingEstimatorPipeline =
dataPrepPipeline
.Append(mlContext.Auto().CreateSweepableEstimator((context, param) =>
{
var option = new LightGbmRegressionTrainer.Options()
{
NumberOfLeaves = param.NumberOfLeaves,
NumberOfIterations = param.NumberOfTrees,
MinimumExampleCountPerLeaf = param.MinimumExampleCountPerLeaf,
LearningRate = param.LearningRate,
LabelColumnName = "fare_amount",
FeatureColumnName = "Features",
HandleMissingValue = true
};
return context.Regression.Trainers.LightGbm(option);
}, searchSpace));
搜索空间定义了一个超参数的搜索范围。
可扫除估计器使你能够在ML.NET管道内使用搜索空间,就像你使用任何其他估计器一样。
为了创建和运行实验,你要经历使用CreateExperiment 和Run 方法的相同过程。
模型生成器和ML.NET CLI更新
我们对模型生成器和ML.NET CLI进行了一些更新。我想强调的是其中的两个:
- Model Builder中的时间序列预测方案
- 新版本的.NET CLI
时间序列预测方案(预览)
时间序列预测是在随时间变化的观察中识别模式,并对未来几个时期进行预测的过程。现实世界的用例有:
- 预测产品需求
- 预测能源消耗
在ML.NET中,选择时间序列预测的训练器并不难,因为你只有一个选择,ForecastBySsa。困难的部分来自于寻找参数,如分析的时间窗口和对未来的预测程度。寻找正确的参数是一个实验的过程,这使它成为AutoML的一项出色的工作。对我们的AutoML实现的更新使其有可能通过超参数器进行智能搜索,从而简化了时间序列预测模型的训练过程。
作为这些努力的结果,我们很高兴地分享,你现在可以在Model Builder中训练时间序列预测模型。

下载或更新到最新版本的Model Builder,开始训练你的时间序列预测模型。
新版本的ML.NET CLI
ML.NET CLI是我们的跨平台.NET全球工具,它利用AutoML在运行Windows、MacOS和Linux的x64和ARM64设备上训练机器学习模型。几个月前,我们发布了ML.NET CLI的新版本,带来了:
- 支持.NET 6
- 对ARM64架构的支持
- 新方案
- 图像分类(针对x64架构)
- 建议
- 预测
安装ML.NET CLI并开始从命令行训练模型。
笔记本中的键盘快捷键
交互式笔记本在数据科学和机器学习中被广泛使用。它们对于数据探索和准备、实验、模型的可解释性和教育都是很好的。
去年10月,我们宣布为Visual Studio发布了由.NET互动支持的笔记本编辑器扩展。在过去的几个月里,我们一直在不断地进行性能和稳定性的改进。
在我们最新的版本中,我们通过启用键盘快捷键,使你更容易在不离开键盘的情况下提高工作效率。如果你以前使用过笔记本,这些快捷方式中的许多应该对你来说是熟悉的。
| 按键 | 命令 |
|---|---|
K | 将焦点向上移动 |
J | 焦点下移 |
A | 在上面插入单元格 |
B | 在下面插入单元格 |
DD | 删除单元格 |
Ctrl +Z | 撤销 |
Ctrl +S | 保存 |
Ctrl +C | 复制单元格 |
Ctrl +X | 剪切单元格 |
Ctrl +V | 粘贴单元格 |
L | 切换行数 |
O | 切换输出 |
II | 取消单元格的执行 |
00 | 重新启动内核 |
Ctrl + +Shift - | 分割单元 |
Ctrl+Enter | 执行/运行单元 |
Shift +Enter | 执行/运行单元格并向下移动焦点 |
表中的键都是大写的,但大写并不是必须的。
安装最新版本的笔记本编辑器并开始在Visual Studio中创建笔记本。
ML.NET的下一步是什么?
我们正在积极努力实现我们的路线图中所列出的领域。
深度学习
几个月前,我们分享了我们对深度学习的计划。该计划的很大一部分是围绕改善ONNX的消费体验,并通过TorchSharp(一个提供访问PyTorch库的.NET库)实现新的场景。我们在实现这一计划方面取得的一些进展包括:
- 为ONNX推理启用了全局GPU标志。
ApplyOnnxModel在这次更新之前,当你想使用GPU对ONNX模型进行推理时,FallbackToCpu和GpuDeviceId变换中的标志没有被保存为流水线的一部分。因此,你必须每次都适应管线。我们将这些标志作为MLContext的一部分进行访问,这样你就可以将它们保存为模型的一部分。 - TorchSharp针对.NET标准。TorchSharp最初的目标是.NET 5。作为我们在ML.NET中实现TorchSharp集成的工作的一部分,我们已经更新了TorchSharp,使其针对.NET标准。
我们很高兴在未来几周与你分享我们将TorchSharp与ML.NET集成的进展。敬请关注博文。
.NET数据框架
干净和有代表性的数据有助于提高你的模型的性能。因此,理解、清理和准备训练数据的过程是机器学习工作流程中的一个关键步骤。几年前,我们在Microsoft.Data.AnalysisNuGet包中把DataFrame类型作为一个预览版引入到.NET。DataFrame仍然处于预览阶段。我们理解拥有执行数据清理和处理任务的工具对你来说有多重要,并且已经开始组织和优先处理反馈,因此我们解决了现有的稳定性和开发者体验的痛点。这些反馈正在被组织为GitHub问题的一部分。
我们已经创建了这个跟踪问题来跟踪和组织反馈。如果你有任何反馈想与我们分享,请为描述中的单个问题加注,或直接在跟踪问题中评论。
MLOps
机器学习运营(MLOps)就像机器学习生命周期中的DevOps。这包括像模型部署和管理以及数据跟踪,这有助于机器学习模型的生产。我们一直在评估如何改善ML.NET的这种体验。
最近,我们发表了一篇博文,指导你完成设置Azure机器学习数据集、使用ML.NET CLI训练ML.NET模型以及用Azure Devops配置再训练管道的过程。欲知详情,请查看《在Azure ML中训练一个ML.NET模型》一文。
开始和资源
在Microsoft Docs中了解更多关于ML.NET、Model Builder和ML.NET CLI的信息。
如果你遇到任何问题、功能请求或反馈,请在GitHub上的ML.NET repo或ML.NET Tooling(Model Builder & ML.NET CLI) repo中提出问题。
加入ML.NET Community Discord或#machine-learning channel on the .NET Development Discord(aka.ms/dotnet-disc…
每隔周三太平洋时间上午10点,收听机器学习.NET社区的讲座。