machine-learning - 在 ML.NET 中更新经过训练的模型
问题描述
这个例子展示了如何使用矩阵分解来构建推荐系统。这个例子特别适用于只有两个相关 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 中更新经过训练的模型?链接相关的信息来源也将不胜感激。
解决方案
在此特定示例中,由于正在执行的任务,您仅限于模型训练的观察范围,并且可以对该集合进行预测。正如你所提到的,一个很好的方法是重新训练。我自己没有尝试过,但您可能想尝试以下方法之一:
Fit
使用您要训练的新数据作为输入再次运行函数。模型不仅应该坚持之前的训练,而且还应该使用您提供的其他数据重新训练。- 将模型保存到文件,加载持久模型,运行
Fit
类似上面的函数。
推荐阅读
- elasticsearch - 为什么这个弹性搜索查询不返回任何内容
- google-apps-script - 将 Google 表单的上传位置更改为 Google 协作平台
- flutter - 我如何在这里获取到 ui 的点赞数。点赞数在 firebase 中更新,但不会在 ui 中更新。代码如下所示
- lua - ServerScriptService.DataStore:41:预期的“结束”(在第 31 行关闭“功能”),得到
- sql - 错误:在插入数据时用作表达式的子查询返回多行
- flutter - 如何将点击列表项添加到 Favorite_Item_Page
- python - VS Code 中的 Python:我可以在集成终端中运行单元格吗?
- javascript - 下划线主题与 Webpack 未能构建
- jira - Jira 中后功能的执行顺序看起来不正确
- xml-parsing - publicId 和 systemId 之间需要空格,但 XML 看起来没问题