ML.Net 学习之使用经过训练的模型进行预测

什么是ML.Net:(学习文档上摘的一段:ML.NET 文档 - 教程和 API 参考 | Microsoft Learn 【学习入口】)
它使你能够在联机或脱机场景中将机器学习添加到 .NET 应用程序中。 借助此功能,可以使用应用程序的可用数据进行自动预测。 机器学习应用程序利用数据中的模式来进行预测,而不需要进行显式编程。

ML.NET 的核心是机器学习模型 。 该模型指定将输入数据转换为预测所需的步骤。 借助 ML.NET,可以通过指定算法来训练自定义模型,也可以导入预训练的 TensorFlow 和 ONNX 模型。

拥有模型后,可以将其添加到应用程序中进行预测。

说明:我已经用.cli工具生成好模型了,现在需要用训练模型生成预测数据。我需要用多线程的方式来预测,查看文档后大概有以下几种预测方式

(1)单一预测,使用PredictionEngine

//定义的输入数据的类

ModelInput inputData = new ModelInput()
{
Stock_cd = @"s_600803",
Stock_subject = @"油气开采;甲醇;蜱虫;天然气;并购重组;沪港通概念;油价上调;海藻炼油;融资融券;转融券标的",
Stock_block = @"994392,992046",
Stati_date = @"2013/1/14",
IsNewStock = @"否",
Stock_capital = 9857851F,
Price = 11.922F,
Volume = 14950900F,
Orders = -1043.7F,
Transaction = -3330F,
};

//Create MLContext
MLContext mlContext = new MLContext();

// Load Trained Model StockHolderPrediction.mlnet是已经训练好的模型
string filepath = Path.Combine(Environment.CurrentDirectory, "StockHolderPrediction.mlnet");
DataViewSchema predictionPipelineSchema;
ITransformer predictionPipeline = mlContext.Model.Load(filepath, out predictionPipelineSchema);
PredictionEngine<ModelInput, ModelOutput> predictionEngine = mlContext.Model.CreatePredictionEngine<ModelInput, ModelOutput>(predictionPipeline);

ModelOutput prediction = predictionEngine.Predict(inputData);
PredictionEngine 不是线程安全。 此外,必须在应用程序中的每一处所需位置创建它的实例。 随着应用程序的增长,此过程可能会变得难以管理。为了提高性能和线程安全,请结合使用依赖项注入和 PredictionEnginePool 服务

(2)单一预测,使用PredictionEnginePool

ModelInput inputData = new ModelInput()

{

Stock_cd = @"s_600803",

Stock_subject = @"油气开采;甲醇;蜱虫;天然气;并购重组;沪港通概念;油价上调;海藻炼油;融资融券;转融券标的",

Stock_block = @"994392,992046",

Stati_date = @"2013/1/14",

IsNewStock = @"否",

Stock_capital = 9857851F,

Price = 11.922F,

Volume = 14950900F,

Orders = -1043.7F,

Transaction = -3330F,

};

//Make Prediction

ModelOutput prediction = _predictionEnginePool.Predict(modelName: "StockHolderPrediction", example: inputData);

说明:上面这句之前我是这样写的:ModelOutput prediction = _predictionEnginePool.Predict(inputData);一直报错:You need to configure a default, not named, model before you use this method.

网上资料少,为了找这问题花好长时间

(3)多个预测,使用PredictionEnginePool

List<ModelInput> inputDataList = new List<ModelInput>();

inputDataList.Add(new ModelInput()

{

Stock_cd = @"s_600803",

Stock_subject = @"油气开采;甲醇;蜱虫;天然气;并购重组;沪港通概念;油价上调;海藻炼油;融资融券;转融券标的",

Stock_block = @"994392,992046",

Stati_date = @"2013/1/14",

IsNewStock = @"否",

Stock_capital = 9857851F,

Price = 11.922F,

Volume = 14950900F,

Orders = -1043.7F,

Transaction = -3330F,

});

IEnumerable<ModelOutput> predictions = inputDataList.Select(input => _predictionEnginePool.Predict(modelName: "StockHolderPrediction", example: input));

foreach (ModelOutput model in predictions)

{

}

可以用这个方法,预测一组(多个)。

(4)多个预测采用,IDataView

List<ModelInput> inputDataList = new List<ModelInput>();

inputDataList.Add(new ModelInput()

{

Stock_cd = @"s_600803",

Stock_subject = @"油气开采;甲醇;蜱虫;天然气;并购重组;沪港通概念;油价上调;海藻炼油;融资融券;转融券标的",

Stock_block = @"994392,992046",

Stati_date = @"2013/1/14",

IsNewStock = @"否",

Stock_capital = 9857851F,

Price = 11.922F,

Volume = 14950900F,

Orders = -1043.7F,

Transaction = -3330F,

});

//Create MLContext

MLContext mlContext = new MLContext();

// Load Trained Model

string filepath = Path.Combine(Environment.CurrentDirectory, "StockHolderPrediction.mlnet");

DataViewSchema predictionPipelineSchema;

ITransformer predictionPipeline = mlContext.Model.Load(filepath, out predictionPipelineSchema);

// Predicted Data

IDataView inputDataView = mlContext.Data.LoadFromEnumerable(inputDataList);

IDataView predictions = predictionPipeline.Transform(inputDataView);

// Get Predictions

float\[\] scoreColumn = predictions.GetColumn<float>("Score").ToArray();

经测试,这几种方式都能预测出结果,下一步,我需要比较哪一种方法用在多线程中比较好。

说明:我创建的是一个ASP.NET Core Web 应用(visual studio 2022)

需要注入PredictionEnginePool

说明:本文是经过学习摸索后写的总结性文章,难免遗漏。主要是备忘。不喜勿喷!

相关推荐
智闲电子设计1 小时前
STM32 定时器 PWM 实战:从呼吸灯到舵机控制
c语言·stm32·单片机·嵌入式硬件·学习
世人万千丶8 小时前
鸿蒙日志体系高级应用:HiLog分级输出/隐私脱敏/远程日志采集/线上问题精准溯源方案
学习·harmonyos·鸿蒙
ctlover11 小时前
Python学习第 5 日
学习
六点_dn11 小时前
RabbitMQ学习笔记-部署和使用
笔记·学习·rabbitmq
MartinYeung514 小时前
[论文学习]OSReward:为跨平台计算机使用奖励模型建立标准化评估
人工智能·学习
dong13269714 小时前
Agent Skills学习笔记
笔记·学习
for_ever_love__15 小时前
iOS:网络请求再学习
网络·学习·ios·objective-c
世人万千丶15 小时前
鸿蒙Crash高级捕获与异常监控:全局异常兜底/崩溃栈解析/符号表还原/智能聚类/闭环修复
学习·机器学习·华为·数据挖掘·harmonyos·鸿蒙·聚类
Jul1en_15 小时前
【Claude Code Compact】源码级别的学习上下文压缩
java·前端·学习·github·ai编程
fengci.16 小时前
Microweber CMS 未授权路径穿越漏洞(CVE-2026-65694)
android·开发语言·前端·学习·php