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)

浙公网安备 33010602011771号