这个例子展示了如何使用矩阵分解来构建推荐系统。这个例子特别适用于只有两个相关 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 或示例。我最终在 ML.NET 的官方 github 上留下了一个问题,但到目前为止我还没有得到任何答案。
问题很简单,简而言之,如何在 ML.NET 中更新经过训练的模型?链接相关的信息来源也将不胜感激。