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)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?