在ML.NET中更新训练有素的模型

时间:2019-01-08 02:08:12

标签: machine-learning matrix-factorization ml.net

example显示了如何使用矩阵分解来建立推荐系统。此示例特别适用于只有两个相关ID(例如相应用户已购买的用户ID和产品ID)的数据集。

基于此示例,我准备了如下输入数据。

X = rand.rand(10, 2)
dist_sq = np.sum((X[:, np.newaxis, :] - X[np.newaxis, :, :]) ** 2, axis=-1)

并更改列名称,使之为[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

重新训练模型可能是一个显而易见的答案,但是每次引入新数据时重新训练模型似乎都是徒劳的。我认为肯定有一种更新现有模型的方法,但是我找不到相关的文档,API或文档。随处取样。我最终离开了a question in the official github of ML.NET,但到目前为止我还没有任何答案。

概括地说,问题将非常简单,如何在ML.NET中更新经过训练的模型?链接相关的信息源也将不胜感激。

2 个答案:

答案 0 :(得分:1)

在此特定示例中,由于正在执行任务,因此您仅限于训练模型所依据的观察范围,并且可以对该集合进行预测。正如您提到的,进行此操作的好方法是重新培训。我自己没有尝试过,但是您可能要尝试以下一种方法:

  1. 使用要训练的新数据作为输入再次运行Fit函数。该模型不仅应保留以前的训练,而且还应使用您提供的其他数据进行重新训练。
  2. 将模型保存到文件,加载持久化模型,运行上述的Fit函数。

答案 1 :(得分:1)

截至 2021 年:

此处详细描述了重新训练过程:https://docs.microsoft.com/en-us/dotnet/machine-learning/how-to-guides/retrain-model-ml-net