ML.NET:获取全部预测分数及其对应的Lable标签

首先事情的起因呢,是我想获取多个预测结果,比如得分排名前三的标签值(Lable)

但是现在返回的数据是这样的(这是微软官方文档的介绍,自动翻译不太准哈):

 

 

 解释一下:

Score:是一个数值类型的数组,会返回全部预测结果的分数(但只有分数)

PredictedLabel:预测标签,这里只会返回一个,也就是Score中最大值对应的结果(其实就是用Score中最大值的索引去标签列表中获取的)

注意:不同的算法返回的可能会不一样

 

接下来进入正题,怎么获取Score中排名前三的值对应的标签(Lable)

复制代码
//获取模型中的全部Lable
var labelBuffer = new VBuffer<ReadOnlyMemory<char>>();
_predEngine.OutputSchema["Score"].Annotations.GetValue("SlotNames", ref labelBuffer);
//模型会将训练数据中的Lable都保留下来,我猜测是按照输入顺序保存的 
var labels = labelBuffer.DenseValues().Select(x => x.ToString()).ToArray();

//
labels[]和Score[]是顺序是相同且一一对应的,比如lables[2]的分数就是Score[2]
labels.ToDictionary(x=> x,x => (decimal)prediction.Score[Array.IndexOf(labels, x)])
复制代码

其实调试是可以发现模型中确实是有这些数据,但试了半天始终不知道怎么取出来(奈何我太菜了!)

最后经过不懈努力终于找到了这篇文章:Get all prediction scores from your ML.NET model | Michaël’s coding thoughts (hompus.nl)

 

 
 
 
posted @   该昵称已被屏蔽  阅读(241)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示