在 ML.NET 中更新经过训练的模型
Posted
技术标签:
【中文标题】在 ML.NET 中更新经过训练的模型【英文标题】:Update a trained model in ML.NET 【发布时间】:2019-06-02 16:58:45 【问题描述】:这个example 展示了如何使用矩阵分解来构建推荐系统。这个例子特别适用于只有两个相关 id 的数据集,比如对应用户购买的用户 id 和产品 id。
基于这个例子,我准备了如下的输入数据。
[UserId] [ProductId]
3 1
3 15
3 23
5 9
5 1
8 2
8 1
.
.
并更改列名,使TextLoader
。
var reader = ctx.Data.TextReader(new TextLoader.Arguments()
Separator = "tab",
HasHeader = true,
Column = new[]
new TextLoader.Column("Label", DataKind.R4, 0),
new TextLoader.Column("UserId", DataKind.U4, new [] new TextLoader.Range(0) , new KeyRange(0, 100000)),
new TextLoader.Column("ProductId", DataKind.U4, new [] new TextLoader.Range(1) , new KeyRange(0, 300))
);
效果很好。它推荐目标用户可以购买的产品列表,并带有个人分数。但是,它不适用于初始输入数据中不存在的新客户数据,例如UserId 1
,它会根据预测给出分数NaN
。
重新训练模型可能是一个显而易见的答案,但每次有新数据进入时重新训练模型似乎是徒劳的。我认为肯定有一种方法可以更新现有模型,但我找不到相关文档、API 或随处取样。我最终离开了a question in the official github of ML.NET,但到目前为止我还没有得到任何答复。
问题很简单,简而言之,如何?链接相关信息源也将不胜感激。
【问题讨论】:
***.com/questions/52470794/… 【参考方案1】:在此特定示例中,由于正在执行的任务,您仅限于模型训练时所依据的观察范围,并且可以对该集合进行预测。正如你所提到的,一个很好的方法是重新训练。我自己没有尝试过,但您可能想尝试以下方法之一:
-
使用您要训练的新数据作为输入再次运行
Fit
函数。模型不仅应该保留之前的训练,还应该使用您提供的其他数据重新训练。
将模型保存到文件,加载持久模型,运行Fit
函数,如上。
【讨论】:
我们是否确认在已经训练好的数据集上运行 Fit 可以达到我们预期的效果?如果没有,我会在今天晚些时候试一试,看看会发生什么。 那么,比尔,发生了什么事? 对此有何更新?【参考方案2】:截至 2021 年:
这里详细描述了重新训练的过程:https://docs.microsoft.com/en-us/dotnet/machine-learning/how-to-guides/retrain-model-ml-net
【讨论】:
以上是关于在 ML.NET 中更新经过训练的模型的主要内容,如果未能解决你的问题,请参考以下文章
ML.NET机器学习API容器化与Azure DevOps实践:RESTful API
[.NET6]使用ML.NET+ONNX预训练模型整活B站经典《华强买瓜》
ML.NET Cookbook:(18)如何在文本数据上训练模型?