当前位置: 首页 > news >正文

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

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

相关文章:

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

什么是ML.Net&#xff1a;&#xff08;学习文档上摘的一段&#xff1a;ML.NET 文档 - 教程和 API 参考 | Microsoft Learn 【学习入口】&#xff09; 它使你能够在联机或脱机场景中将机器学习添加到 .NET 应用程序中。 借助此功能&#xff0c;可以使用应用程序的可用数据进行自…...

为什么 centos 下使用 tree 命令看不见 .env 文件

CentOS 下使用 tree 命令看不到 .env 文件主要有两个可能的原因&#xff1a; 默认情况下&#xff0c;tree 命令不显示隐藏文件。在 Linux 系统中&#xff0c;以点(.)开头的文件或目录被视为隐藏文件。.env 文件就属于这种隐藏文件。 您可能没有安装 tree 命令。如果在 CentOS …...

数据库基础与性能概述及相关术语

在计算机科学领域&#xff0c;特别是数据库技术中&#xff0c;掌握与数据库性能相关的专业词汇对于数据库管理员、开发人员及数据分析师等专业人员来说至关重要。以下是一篇关于计算机必背单词——数据库性能相关的详细解析. 一、数据库基础与性能概述 数据库是计算机科学中的…...

docker基于外部缓存加速构建方案

开启外部缓存 http://your_apt_cacher_ng_server:3142 是一个示例 URL&#xff0c;表示需要设置的 apt-cacher-ng 代理服务器的地址。apt-cacher-ng 是一个本地代理服务器&#xff0c;可以缓存从官方 APT 仓库下载的软件包&#xff0c;从而加速后续的下载过程&#xff0c;并减…...

【C语言】 作业11 链表+实现函数封装

递归实现链表数据互换&#xff0c;纯不会&#xff0c;明天再说 1、链表实现以下功能 链表&#xff0c;创建链表&#xff0c;申请节点&#xff0c;判空&#xff0c;头插&#xff0c;遍历输出&#xff0c;通过位置查找节点&#xff0c;任意位置插入&#xff0c;头删&#xff0c;…...

【Ubuntu】Ubuntu20修改MAC地址

文章目录 一、临时修改MAC地址&#xff08;重启后复原&#xff09;二、永久修改MAC地址 场景&#xff1a;在做虚拟机复制时&#xff0c;复制完的两台虚拟机存在相同MAC&#xff0c;导致无法分别分配IP。 解决&#xff1a;修改一台虚拟机的MAC地址。 一、临时修改MAC地址&#…...

ClickHouse集成LDAP实现简单的用户认证

1.这里我的ldap安装的是docker版的 docker安装的化就yum就好了 sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin sudo systemctl start docker 使用下面的命令验证sudo docker run hello-world docker pull osixia/openl…...

C语言-预处理详解

1.预处理符号 C语言中设置了一些预定义符号&#xff0c;可以直接使用&#xff0c;预定义符号是在预处理期间处理的。 __FILE__//代表当前进行编译的源文件 __LINE__//文件当前行号 __DATE__//文件当前日期 __TIME__//文件当前时间 __STDC__//如果编译器遵循ANSIC&#xff0c;…...

计算机网络-VLAN间通信(三层通信)模拟实现

目录 VLAN基础知识VLAN和普通LAN区别划分VLAN的原因 实现VLAN间的通信&#xff08;三层通信&#xff09;方案一&#xff1a;多臂路由方案二&#xff1a;单臂路由方案三&#xff1a;三层交换机 VLAN基础知识 VLAN&#xff08;Virtual Local Area Network&#xff0c;虚拟局域网…...

【JAVA】数据类型及变量

&#x1f389;欢迎大家收看&#xff0c;请多多支持&#x1f339; &#x1f970;关注小哇&#xff0c;和我一起成长&#x1f680;个人主页&#x1f680; Java的数据类型 可以分为两类&#xff0c;基本数据类型和引用数据类型 基本数据类型有4类8种&#xff0c;4类分别是整型 浮…...

微软蓝屏事件暴露的网络安全问题

目录 1.概述 2.软件更新流程中的风险管理和质量控制机制 2.1.测试流程 2.2.风险管理策略 2.3.质量控制措施 2.4.小结 3.预防类似大规模故障的最佳方案或应急响应对策 3.1. 设计冗余系统 3.2. 实施灾难恢复计划 3.3. 建立高可用架构 3.4. 类似规模的紧急故障下的响应…...

11 - FFmpeg - 编码 AAC

Planar 模式是 ffmpeg内部存储模式&#xff0c;我们实际使用的音频文件都是Packed模式的。 FFmpeq解码不同格式的音频输出的音频采样格式不是一样。 其中AAC解码输出的数据为浮点型的 AV_SAMPLE_FMT_FLTP 格式&#xff0c;MP3 解码输出的数据为 AV_SAMPLE_FMT_S16P 格式(使用的…...

OS Copilot初体验的感受与心得

本文介绍体验操作系统智能助手OS Copilot后&#xff0c;个人的一些收获、体验等。 最近&#xff0c;抽空体验了阿里云的操作系统智能助手OS Copilot&#xff0c;在这里记录一下心得与收获。总体观之&#xff0c;从个人角度来说&#xff0c;感觉这个OS Copilot确实抓住了不少开发…...

Ajax学习笔记

文章目录标题 Ajax学习笔记axios使用axios请求拦截器axios响应拦截器优化axios响应结果 form-serialize插件图片上传HTTP协议请求报文相应报文接口文档 AJAX原理 - XMLHttpRequest使用XMLHttpRequestXMLHttpRequest - 查询参数查询字符串对象 XMLHttpRequest - 数据提交 事件循…...

医学深度学习与机器学习融合的随想

医学深度学习与机器学习融合的随想 近年来&#xff0c;深度学习&#xff08;图像类&#xff09;和机器学习在医学领域的应用取得了飞速发展&#xff0c;为医学影像分析、疾病诊断和预后预测等领域带来了革命性的变革。深度学习擅长从复杂数据中提取高层次特征&#xff0c;而机…...

坑人的macos tar 命令 (实际上是bsdtar)换用 gnu tar

周末 看着笔记本上好用的朗文当代高级词典(mac版)和其它两部词典&#xff0c;准备复制到黑苹果台式机上去。考虑到词典内容有太多小文件&#xff0c;普通复制传输太慢&#xff0c;毫无疑问用 tar 打包肯定快而且能保留原始文件的各种信息。命令如下&#xff1a; time tar czf …...

【SpringBoot3】全局异常处理

【SpringBoot3】全局异常处理 一、全局异常处理器step1&#xff1a;创建收入数字的页面step2:创建控制器&#xff0c;计算两个整数相除step3:创建自定义异常处理器step5&#xff1a;创建给用提示的页面step6&#xff1a;测试输入&#xff08;10/0&#xff09; 二、BeanValidato…...

vue-Treeselect

一、Node KeyTypeDescriptionid (required)Number | String用于标识树中的选项。其值在所有选项中必须是唯一的label (required)String用于显示选项childrennode[] | null声明一个分支节点。你可以&#xff1a; 1&#xff09; 设置为由a组成的子选项数组。叶节点&#xff0c;b…...

【机器学习框架TensorFlow和PyTorch】基本使用指南

机器学习框架TensorFlow和PyTorch&#xff1a;基本使用指南 目录 引言TensorFlow概述 TensorFlow简介TensorFlow的基本使用 PyTorch概述 PyTorch简介PyTorch的基本使用 TensorFlow和PyTorch的对比结论 引言 随着深度学习的快速发展&#xff0c;机器学习框架在实际应用中起到…...

matlab 中的methods(Access = protected) 是什么意思

gpt版本 在 MATLAB 中&#xff0c;methods 是用于定义类方法的一部分。(Access protected) 是一种访问控制修饰符&#xff0c;它限制了方法的访问权限。具体来说&#xff0c;当你在类定义中使用 methods(Access protected) 时&#xff0c;你是在定义只有类本身及其子类可以访…...

【漏洞复现】Netgear WN604 downloadFile.php 信息泄露漏洞(CVE-2024-6646)

0x01 产品简介 NETGEAR WN604是一款由NETGEAR&#xff08;网件&#xff09;公司生产的无线接入器&#xff08;或无线路由器&#xff09;提供Wi-Fi保护协议&#xff08;WPA2-PSK, WPA-PSK&#xff09;&#xff0c;以及有线等效加密&#xff08;WEP&#xff09;64位、128位和152…...

图像处理 -- ISP调优(tuning)的步骤整理

ISP调优流程培训文档 1. 硬件准备 选择合适的图像传感器&#xff1a;根据项目需求选择合适的传感器型号。搭建测试环境&#xff1a;包括测试板、光源、色彩卡和分辨率卡等。 2. 初始设置 寄存器配置&#xff1a;初始化传感器的寄存器设置&#xff0c;包括曝光、增益、白平衡…...

【中项】系统集成项目管理工程师-第4章 信息系统架构-4.2系统架构

前言&#xff1a;系统集成项目管理工程师专业&#xff0c;现分享一些教材知识点。觉得文章还不错的喜欢点赞收藏的同时帮忙点点关注。 软考同样是国家人社部和工信部组织的国家级考试&#xff0c;全称为“全国计算机与软件专业技术资格&#xff08;水平&#xff09;考试”&…...

node.js中nodemon : 无法加载和使用问题,这是由于windows安全策略影起的按如下操作即可

1、用管理员权限打开vscode 2、文件终端中打开&#xff0c;输入 Set-ExecutionPolicy -Scope CurrentUser 3、再输入RemoteSigned 4、使用get-ExecutionPolicy查看权限&#xff0c;可以看到变为了RemoteSigned 重启问题解决...

【SD】 Stable Diffusion(SD)原理详解与ComfyUI使用 2

Stable Diffusion&#xff08;SD&#xff09;原理详解与ComfyUI使用 Stable Diffusion&#xff08;SD&#xff09;原理详解与ComfyUI使用1. SD整体结构2. Clip&#xff08;文本编码器&#xff09;3. Unit&#xff08;生成模型&#xff09;4. VAE&#xff08;变分自编码器&#…...

【学习笔记】无人机系统(UAS)的连接、识别和跟踪(七)-广播远程识别码(Broadcast Remote ID)

目录 引言 5.5 广播远程识别码&#xff08;Broadcast Remote ID&#xff09; 5.5.1 使用PC5的广播远程识别码 5.5.2 使用MBS的广播远程识别码 引言 3GPP TS 23.256 技术规范&#xff0c;主要定义了3GPP系统对无人机&#xff08;UAV&#xff09;的连接性、身份识别、跟踪及…...

VMware 虚拟机 ping 不通原因排查

目录 一、检查网络 二、重启虚拟机网络 因为最近遇到了一个比较奇怪的 ping 不通虚拟机的事&#xff0c;在此过程中&#xff0c;检查了很多的设置&#xff0c;故而写一篇文章记录下&#xff0c;如有 VMware 虚拟机 ping 不通可以尝试本文的排查方式。 下面以 VMware 虚拟机为…...

websocket状态机

websocket突破了HTTP协议单向性的缺陷&#xff0c;基于HTTP协议构建了双向通信的通道&#xff0c;使服务端可以主动推送数据到前端&#xff0c;解决了前端不断轮询后台才能获取后端数据的问题&#xff0c;所以在小程序和H5应用中被广泛使用。本文主要集合报文分析对于websocket…...

JCR一区级 | Matlab实现CPO-Transformer-LSTM多变量回归预测【2024新算法】

JCR一区级 | Matlab实现CPO-Transformer-LSTM多变量回归预测【2024新算法】 目录 JCR一区级 | Matlab实现CPO-Transformer-LSTM多变量回归预测【2024新算法】效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.【JCR一区级】Matlab实现CPO-Transformer-LSTM多变量回归预测…...

力扣3226 使两个整数相等的位更改次数

写的代码&#xff1a; class Solution { public:string cc(int num){string res"";while(num>0){int rnum % 2;resstatic_cast<char>(48r)res;num/2;}return res;}int minChanges(int n, int k) {int res0;string n2cc(n);string k2cc(k);int n_sizen2.siz…...