【问题标题】:Update a trained model in ML.NET在 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,但到目前为止我还没有得到任何答复。

问题很简单,简而言之,如何在 ML.NET 中更新经过训练的模型?链接相关信息源也将不胜感激。

【问题讨论】:

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


【解决方案1】:

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

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

【讨论】:

  • 我们是否确认在已经训练好的数据集上运行 Fit 可以达到我们预期的效果?如果没有,我会在今天晚些时候试一试,看看会发生什么。
  • 那么,比尔,发生了什么事?
  • 对此有何更新?
【解决方案2】:

截至 2021 年:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2019-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-28
    相关资源
    最近更新 更多