此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中更新经过训练的模型?链接相关的信息源也将不胜感激。答案 0 :(得分:1)
在此特定示例中,由于正在执行任务,因此您仅限于训练模型所依据的观察范围,并且可以对该集合进行预测。正如您提到的,进行此操作的好方法是重新培训。我自己没有尝试过,但是您可能要尝试以下一种方法:
Fit
函数。该模型不仅应保留以前的训练,而且还应使用您提供的其他数据进行重新训练。Fit
函数。答案 1 :(得分:1)
此处详细描述了重新训练过程:https://docs.microsoft.com/en-us/dotnet/machine-learning/how-to-guides/retrain-model-ml-net