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 @ 2022-02-22 09:49  该昵称已被屏蔽  阅读(272)  评论(0)    收藏  举报