什么是 ML.NET?
ML.NET 是由 Microsoft 为 .NET 开发者平台创建的免费、开源、跨平台的机器学习框架。
ML.NET
ML.NET 是适用于 .NET 开发人员平台的免费开放源代码和跨平台机器学习框架。
ML.NET 允许你对各种 ML 方案使用 C# 或 F# 来训练、构建和发布定制的机器学习模型。ML.NET 包括自动机器学习 (AutoML) 等功能以及 ML.NET CLI 和 ML.NET Model Builder 等工具,这使得将机器学习集成到应用中变得更加容易。
分步 ML.NET
ML.NET 对几乎每个方案都遵循相同的基本步骤;它结合了数据加载、转换和模型训练,让你能够轻松地创建机器学习模型。
创建 ML.NET 上下文
MLContext 是所有 ML.NET 操作的起点。MLContext
用于创建和使用 ML.NET 模型的所有方面。它在概念上类似于实体框架中的 DbContext
。
var mlContext = new MLContext();
一旦有了 MLContext
实例,就可以加载和转换数据、为机器学习任务选择最佳算法、训练模型。训练完成后,可以测试模型的准确性,将其保存到磁盘,并使用它进行预测。可以从以前保存到磁盘的模型初始化 MLContext
。
加载数据
机器学习使用已知数据(例如,训练数据)来查找模式,以便对新的未知数据进行预测。
机器学习的输入称为“功能”,是用于进行预测的属性。机器学习的输出称为“标签”,是实际预测。
ML.NET 中的数据表示为 IDataView,这是描述表格数据 (例如行和列) 的一种灵活有效方法。IDataView 对象可包含数字、文本、布尔值、向量等。可以将文件或实时流式处理源中的数据加载到 IDataView。
LoadFromTextFile
允许你以 TXT、CSV、TSV 和其他文件格式加载数据。
IDataView trainingData = mlContext.Data
.LoadFromTextFile<SentimentInput>(dataPath, separatorChar: ',', hasHeader: true);
LoadFromEnumerable
支持从内存中集合、JSON/XML、关系数据库和非关系数据库(例如 SQL、CosmosDB、MongoDB)和许多其他数据源加载。
IDataView trainingData = mlContext.Data
.LoadFromEnumerable<SentimentInput>(inMemoryCollection);
转换数据
在大多数情况下,可用的数据不适合直接用于训练机器学习模型。需要使用数据转换预先处理原始数据。
转换程序可获取数据、对数据执行一些操作,并返回转换后的新数据。
有用于替换缺少的值、数据转换、特征化文本等内容的内置数据转换集。
// Convert sentiment text into numeric features
IEstimator<ITransformer> dataTransformPipeline = mlContext.Transforms.Text
.FeaturizeText("Features", "SentimentText");
选择算法
使用机器学习和 ML.NET 时,必须选择一个与你的场景相匹配的机器学习任务。ML.NET 为各种 ML 任务提供了 30 多种算法(或训练器):
ML 任务 | 算法 |
---|---|
二进制分类(例如,情绪分析) | AveragedPerceptronTrainer、 SdcaLogisticRegressionBinaryTrainer |
多类分类(例如,主题分类) | LightGbmMulticlassTrainer, OneVersusAllTrainer |
回归(例如价格预测) | LbfgsPoissonRegressionTrainer,FastTreeRegressionTrainer |
群集(例如,客户分段) | KMeansTrainer |
异常情况检测(例如,洗发水销售高峰检测) | RandomizedPcaTrainer |
建议(例如电影推荐器) | MatrixFactorizationTrainer |
排行 (例如,搜索结果) | LightGbmRankingTrainer、FastTreeRankingTrainer |
IEstimator<ITransformer> trainer = mlContext.BinaryClassification.Trainers
.AveragedPerceptron(labelColumnName: "Sentiment", featureColumnName: "Features"));
IEstimator<ITransformer> trainingPipeline = dataTransformPipeline.Append(trainer);
训练模型
在调用 Fit()
方法之前,不会执行指定的数据转换和算法 (由于 ML.NET 的延迟加载方法)。此时发生模型培训。
估算器会接收数据、从数据中学习,并创建转换器。对于模型训练,训练数据是输入,训练模型是输出。因此,训练的模型是一个转换器,可将新数据中的输入功能转换为输出预测。
ITransformer model = pipeline.Fit(trainingData);
评估模型
ML.NET 提供了评估器,可以根据各种指标评估模型的性能:
- 准确度
- 曲线下方区域 (AUC)
- R 平方值
- 根方根误差(RMSE)
// Make predictions on test data
IDataView predictions = model.Transform(testDataView);
// Evaluate model and return metrics
var metrics = mlContext.BinaryClassification
.Evaluate(predictions, labelColumnName: "Sentiment");
// Print out accuracy metric
Console.WriteLine("Accuracy" + metrics.Accuracy);
部署 & 使用模型
可以将已定型的模型另存为二进制文件,之后,其将集成进 .NET 应用程序。
mlContext.Model.Save(model, trainingData, "model.zip");
保存经过训练的模型后,可以在其他 .NET 应用程序中加载该模型。
MLContext mlContext = new MLContext();
DataViewSchema predictionPipelineSchema;
ITransformer trainedModel = mlContext.Model.Load("model.zip", out predictionPipelineSchema);
然后,可以使用加载的模型开始进行预测。可以使用预测引擎(这是一种用于进行单一预测的便捷 API)或者 Transform 方法(用于进行批量预测)。
var predEngine = mlContext.Model.CreatePredictionEngine(model);
SentimentInput sampleComment = new SentimentInput{ SentimentText = "This is very rude!" };
SentimentOutput result = predEngine.Predict(sampleComment);
Console.WriteLine(result.Prediction);
ML.NET 常见问题解答
ML.NET 的用处是什么?
ML.NET 是面向 .NET 开发人员的机器学习框架;可以使用 ML.NET 将自定义机器学习模型集成到 .NET 应用程序中。你可以在许可应用场景中使用 ML.NET,例如情绪分析、价格预测、产品建议、销售预测、映像分类、对象检测等!请查看我们的 GitHub 示例存储库,获取可以使用 ML.NET 执行哪些操作的更多示例。
AI 和机器学习有什么区别?
AI 是一个计算分支,涉及训练计算机执行通常需要人类智能的操作。机器学习是 AI 的一部分,它涉及计算机从数据中学习和在数据中发现模式,以便能够自行对新数据进行预测。
为什么需要 ML.NET,ML.NET 与 Microsoft 的其他人工智能/机器学习产品有哪些不同?
Microsoft 提供了许多 AI 和 ML 产品和服务,下面是它们之间的区别细目:
- ML.NET: 构建自定义机器学习解决方案并将其集成到 .NET 应用中。
- Azure 认知服务: 要添加到应用中,能够提供预构建 AI 和机器学习模型的云服务。包括一组 API,用于使用各种模型实现视觉和语言的自然沟通方法。
- Azure 机器学习: 云中的全面环境,用于托管端到端 ML 模型生命周期,包括云规模的模型训练、版本控制、部署和发布管理。
我可以将 ML.NET 模型部署到哪些类型的应用?
可以将 ML.NET 与几乎任何 .NET 应用一起使用,包括 Web 应用和服务、微服务/容器、桌面应用(WPF 和 WinForms)、Azure Functions 和任何 Azure 服务器端应用类型以及控制台应用。
可以和 ML.NET 一起使用哪些框架?
.NET、.NET Core (版本 2.0 及更高版本)和 .NET Framework (版本 4.6.1 及更高版本)都支持 ML.NET。
ML.NET 支持哪些流程体系结构?
ML.NET 当前在 x64 和 x86 进程上受支持。
可以使用 ML.NET 的操作系统有哪些?
ML.NET 是跨平台的,因此在 Windows、Linux、macOS 上受支持。
ML.NET 免费吗?
是! 与 .NET 平台的其他部分一样,ML.NET 完全免费。有关详细信息,请参阅 .NET 是免费的。ML.NET 在 MIT 许可证 下授权。
ML.NET 的最佳编程语言是什么?
C# 和 F# 目前都支持 ML.NETF。
如何学习 ML.NET?
可以使用本 教程 开始使用 ML.NET, 或查看我们的 ML.NET 文档 以了解详细信息。
如何安装 ML.NET?
可通过添加 Microsoft.ML NuGet 包,将 ML.NET 添加到任何 .NET 项目,或者可以入门 ML.NET Model Builder(Windows) 或 ML.NET CLI(Windows、macOS 和 Linux)。
准备好开始使用了吗?
分步教程将帮助你在计算机上运行 ML.NET。