我想创建一个 CoreML 推荐模型,我的训练数据如下所示:
userID (UUID) | itemID (UUID) | rating (Int)
用户可以对从 0 到 x
个项目进行评分,只要训练数据中的每个用户评分的项目数量相同(例如 10 个),一切正常工作。
但是当我尝试创建训练模型时,情况如下:
- 用户1评分了两个项目,
- 用户2评分了五个项目,
- 用户3评分了一个项目,
我开始遇到以下错误:
Playground execution terminated: An error was thrown and was not caught:▿ Item IDs in the recommender model must be numbered 0, 1, ..., num_items - 1. ▿ generic : 1 element - reason : "Item IDs in the recommender model must be numbered 0, 1, ..., num_items - 1."
如何解决这个问题?
完整的 playground 代码:
let trainingData = try MLDataTable(contentsOf: URL(fileURLWithPath: "/.../test.csv"))let model = try MLRecommender (trainingData: trainingData, userColumn: "userID", itemColumn: "itemID", ratingColumn: "rating")let recs = try model.recommendations(fromUsers: ["050510A3-0C96-4F57-8A45-433422680464"])
回答:
我通过使用归一化和大于0的虚拟分数成功解决了这个问题。更多信息请参见:https://pawel.madej.com/post/ml-recommender-in-practice