我正在使用SageMaker内置的因子分解机模型构建一个推荐系统。
我希望得到一个评分矩阵,通过用户ID和项目ID可以查找预测的得分。
我了解到模型提供了一个预测API:
result = fm_predictor.predict(X_test[1000:1010].toarray())
但我不确定如何使用它来达到预期的目的。如果我想知道,例如,用户#123是否对电影#456感兴趣,我该如何使用上述API呢?
更新:
我想我现在明白了如何使用API,你需要构建另一个独热编码的数据集作为输入,例如:
X_new = lil_matrix((1, nbFeatures)).astype('float32')X_new[0, 935] = 1X_new[0, 1600] = 1prediction2 = X_new[0].toarray()result2 = fm_predictor.predict(prediction2)print(result2)
但似乎用这种方式填充推荐矩阵效率很低。最佳实践是什么呢?
回答:
我认为可以考虑两种情景:
1) 如果你需要非常低的延迟,你确实可以填充矩阵,即计算所有用户的所有推荐,并将其存储在应用程序查询的键/值后端中。你当然可以一次预测多个用户,使用上述的独热编码技术。
2) 通过应用程序直接调用端点进行按需预测。这更简单,但会增加一点延迟。
希望这些对你有帮助。