点击上方蓝字
关注我们
(本文阅读时间:5分钟)
ML.NET是一款面向.NET开发人员的开源,跨平台机器学习框架,可以将自定义机器学习集成到.NET应用中。我们很开心地向您介绍我们在过去几个月中所做的工作。
ML.NET:
https://dotnet.microsoft.com/en-us/apps/machinelearning-ai/ml-dotnet?ocid=AID3045631
AutoML更新
自动化机器学习(AutoML)通过更容易地为您适合的场景和数据集找到最佳算法,从而使该过程自动化。AutoML是支持模型生成器和ML.NET CLI训练经验的后端。去年,我们宣布在我们的模型生成器和基于神经网络智能 (NNI) 的 ML.NET CLI 工具以及 Microsoft Research 的快速轻量级 AutoML (FLAML) 技术中对 AutoML 实施进行了更新。与之前的解决方案相比,这些更新提供了一些好处和改进,包括:
探索的模型数量增加。
提高了超时错误率。
改进的性能指标(例如,准确性和r平方)。
直到最近,您还只能在我们的工具中利用这些AutoML改进。
我们很兴奋地宣布,我们已经将AutoML的NNI / FLAML实现集成到ML.NET框架中,这样你就可以从代码优先的体验中使用它们。
要开始使用AutoML API,请使用ML.NET daily feed安装Microsoft.ML和Microsoft.ML.Auto NuGet包的微软最新的预发布版本。
神经网络智能 (NNI):
https://github.com/Microsoft/nni
快速轻量级 AutoML (FLAML):
https://github.com/Microsoft/flaml
实验的API
实验是训练或试验的集合。每次试验都会产生关于自身的信息,例如:
评估指标:用于评估模型的预测能力的指标。
流水线:用于训练模型的算法和超参数。
实验API为AutoML提供了一组默认值,使您更容易将其添加到训练管道中。
// 配置AutoML管道
var experimentPipeline =
dataPrepPipeline
.Append(mlContext.Auto().Regression(labelColumnName: "fare_amount"));
// 配置实验
var experiment = mlContext.Auto().CreateExperiment()
.SetPipeline(experimentPipeline)
.SetTrainingTimeInSeconds(50)
.SetDataset(trainTestSplit.TrainSet, validateTestSplit.TrainSet)
.SetEvaluateMetric(RegressionMetric.RSquared, "fare_amount", "Score");
// 运行实验
var result = await experiment.Run();
在这个代码片段中,dataprepipeline是一系列转换,用于将数据转换为适合训练的格式。训练回归模型的AutoML组件被附加到该管道上。同样的概念也适用于其他受支持的场景,比如分类。
当您使用已定义的训练管道创建实验时,您可以自定义的设置包括训练时间、训练和验证集以及优化的评估指标。
定义了管道和实验之后,调用Run方法开始训练。
▌搜索空间和可清除估计器
如果需要对超参数搜索空间有更多的控制,可以定义搜索空间,并使用可清除的估计器将其添加到训练管道中。
// 配置搜索空间
var searchSpace = new SearchSpace<LgbmOption>();
// 初始化估计器管道
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做了几个更新。其中我想强调的两个是:
时间序列预测场景的模型生成器
.NET CLI的新版本
▌时间序列预测场景(预览)
时间序列预测是在与时间相关的观测中确定模式,并对未来几个时期作出预测的过程。现实世界的用例有:
预测产品需求
能源消费预测
在ML.NET中,选择时间序列预测的训练师并不太难,因为你只有一个选择,ForecastBySsa。困难的部分在于找到参数,如分析的时间窗口和预测未来的距离。找到正确的参数是一个实验过程,这是AutoML的一项出色工作。对我们的AutoML实现的更新使通过超参数进行智能搜索成为可能,从而简化了训练时间序列预测模型的过程。
作为这些努力的结果,我们很高兴地与大家分享,您现在可以在模型生成器中训练时间序列预测模型。
下载或更新到模型生成器的最新版本,开始训练您的时间序列预测模型。
▌ML.NET CLI的新版本
ML.NET CLI是我们的跨平台.NET全局工具,它利用AutoML在运行Windows、MacOS和Linux的x64和ARM64设备上训练机器学习模型。几个月前,我们发布了ML.NET CLI的新版本,它带来了:
.NET 6 支持
支持 ARM64 架构
新场景
图像分类(针对 x64 架构)
建议
预测
安装 ML.NET CLI 并从命令行开始训练模型。
ForecastBySsa:
https://docs.microsoft.com/zh-cn/dotnet/api/microsoft.ml.timeseriescatalog.forecastbyssa?view=ml-dotnet?ocid=AID3045631
下载或更新到模型生成器的最新版本:
https://docs.microsoft.com/zh-cn/dotnet/machine-learning/how-to-guides/install-model-builder?tabs=visual-studio-2019?ocid=AID3045631
安装 ML.NET CLI:
https://docs.microsoft.com/en-us/dotnet/machine-learning/how-to-guides/install-ml-net-cli?tabs=windows?ocid=AID3045631
Notebooks的键盘快捷键
Interactive Notebooks广泛应用于数据科学和机器学习。它们对于数据探索和准备、实验、模型解释和教育都很有用。
去年10月,我们发布了基于.NET Interactive的Visual Studio Notebook Editor扩展。在过去的几个月里,我们一直在改进性能和稳定性。
在我们的最新版本中,我们通过启用键盘快捷键让您无需离开键盘就能更轻松地工作。如果你以前使用过notebooks,你应该对其中的许多快捷方式很熟悉。
键 | 指令 |
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 | 执行/运行单元格,并将焦点向下移动 |
表中的键是大写的,但大写不是必需的。
安装最新版本的Notebook编辑器,并开始在Visual Studio中创建Notebook。
.NET Interactive:
https://github.com/dotnet/interactive
Visual Studio Notebook Editor扩展:
https://devblogs.microsoft.com/dotnet/ml-net-and-model-builder-october-updates/#notebook-editor-in-visual-studio?ocid=AID3045631
Notebook编辑器:
https://marketplace.visualstudio.com/items?itemName=MLNET.notebook
ML.NET的下一个目标是什么?
我们正积极朝着路线图中所概述的领域努力。
▌深度学习
几个月前,我们分享了深度学习的计划。该计划的很大一部分围绕着改善ONNX的消费体验,并通过TorchSharp(一个提供对驱动PyTorch的库的访问的.NET库)实现新的场景。我们在实现这一计划方面取得的一些进展包括:
为ONNX推断启用全局GPU标志。在此更新之前,当你想使用GPU对ONNX模型进行推断时,ApplyOnnxModel转换中的FallbackToCpu和GpuDeviceId标志没有被保存为管道的一部分。因此,每次都必须安装管道。我们已经使这些标志可作为MLContext的一部分访问,因此您可以将它们保存为模型的一部分。
TorchSharp 面向 .NET 标准。TorchSharp最初的目标是.NET 5。作为我们将TorchSharp集成到ML.NET的工作的一部分,我们更新为TorchSharp面向.NET标准。
在接下来的几周里,我们很高兴与大家分享我们在TorchSharp与ML.NET集成方面取得的进展。
路线图:
https://github.com/dotnet/machinelearning/blob/main/ROADMAP.md
深度学习的计划:
https://github.com/dotnet/machinelearning/issues/5918
TorchSharp:
https://github.com/dotnet/TorchSharp
.NET DataFrame
清晰且具有代表性的数据有助于提高模型的性能。因此,理解、清理和准备训练数据的过程是机器学习工作流中的关键步骤。几年前,我们在.NET中引入了DataFrame类型,作为Microsoft.Data.Analysis NuGet包的预览。DataFrame仍处于预览阶段。我们理解使用工具来执行数据清理和处理任务是多么重要,并且已经开始组织和优先考虑反馈,因此我们解决了现有的稳定性和开发人员经验痛点。这些反馈被组织成GitHub问题的一部分。
我们创建这个跟踪问题是为了跟踪和组织反馈。如果您有任何想要与我们分享的反馈,请在描述中为个别问题投票或在跟踪问题中直接评论。
Microsoft.Data.Analysis:
https://www.nuget.org/packages/Microsoft.Data.Analysis/
跟踪问题:
https://github.com/dotnet/machinelearning/issues/6144
https://pkgs.dev.azure.com/dnceng/public/_packaging/MachineLearning/nuget/v3/index.json
MLOps
机器学习操作(MLOps)就像机器学习生命周期的DevOps。这包括模型部署和管理以及数据跟踪,这有助于机器学习模型的产品化。我们一直在评估用ML.NET改善这种体验的方法。
最近我们发表了一篇博客文章,指导你完成设置Azure机器学习数据集、使用ML.NET CLI训练ML.NET模型以及使用Azure Devops配置再训练管道的过程。要了解更多细节,请参阅《在Azure ML中训练ML.NET模型》一文。
《在Azure ML中训练ML.NET模型》:
https://devblogs.microsoft.com/dotnet/training-a-ml-dotnet-model-with-azure-ml/?ocid=AID3045631
入门和资源
在微软文档中详细了解 ML.NET、模型生成器和 ML.NET CLI。
如果您遇到任何问题,功能请求或反馈,请在GitHub上的ML.NET回购或ML.NET工具(Model Builder & ML.NET CLI)回购中提交问题。
微软文档:
https://docs.microsoft.com/en-us/dotnet/machine-learning/how-to-guides/install-ml-net-cli?tabs=windows?ocid=AID3045631
ML.NET回购或ML.NET工具(Model Builder & ML.NET CLI)回购:
https://github.com/dotnet/machinelearning-modelbuilder
谢谢你读完了本文~相信你一定有一些感想、观点、问题想要表达。欢迎在评论区畅所欲言,期待听到你的“声音”哦!
同时,喜欢的内容也不要忘记转发给你的小伙伴们,谢谢你的支持!
长按识别二维码
关注微软中国MSDN
点击「阅读原文」了解更多ML.NET信息~