相关疑难解决方法(0)

ALS模型的增量训练

我试图找出是否有可能在Apache Spark中使用MLlib对数据进行"增量训练".

我的平台是Prediction IO,它基本上是Spark(MLlib),HBase,ElasticSearch和其他一些Restful部件的包装器.

在我的应用数据中,"事件"是实时插入的,但为了获得更新的预测结果,我需要"pio train"和"pio deploy".这需要一些时间,服务器在重新部署期间会脱机.

我想弄清楚我是否可以在"预测"阶段进行增量训练,但找不到答案.

machine-learning prediction apache-spark predictionio apache-spark-mllib

17
推荐指数
1
解决办法
3902
查看次数

ALS 模型 - 如何生成 full_u * v^t * v?

我试图弄清楚 ALS 模型如何预测新用户在批处理更新之间的值。在我的搜索中,我遇到了这个stackoverflow answer。为方便读者,我复制了以下答案:

您可以使用经过训练的模型(无需更新)获取对新用户的预测:

要获得模型中用户的预测,您可以使用其潜在表示(大小为 f(因子数)的向量 u),乘以乘积潜在因子矩阵(由所有产品的潜在表示组成的矩阵,一堆大小为 f) 的向量,并为您提供每个产品的分数。对于新用户,问题在于您无法访问他们的潜在表示(您只有大小 M(不同产品的数量)的完整表示,但您可以做的是使用相似度函数来计算相似的潜在通过乘以乘积矩阵的转置来表示这个新用户。

即,如果您的用户潜在矩阵是 u 并且您的产品潜在矩阵是 v,对于模型中的用户 i,您可以通过执行以下操作获得分数: u_i * v 对于新用户,您没有潜在表示,因此请使用完整表示 full_u 并执行: full_u * v^t * v 这将近似于新用户的潜在因素,并应该给出合理的建议(如果模型已经为现有用户提供了合理的建议)

为了回答训练问题,这允许您为新用户计算预测,而无需对模型进行繁重的计算,而您现在只能偶尔进行一次。因此,您可以在晚上进行批处理,并且仍然可以在白天对新用户进行预测。

注意:MLLIB 允许您访问矩阵 u 和 v

上面引用的文字是一个很好的答案,但是,我很难理解如何以编程方式实现这个解决方案。例如,矩阵 u 和 v 可以通过以下方式获得:

# pyspark example

# ommitted for brevity ... loading movielens 1M ratings

model = ALS.train(ratings, rank, numIterations, lambdaParam)

matrix_u = model.userFeatures()

print(matrix_u.take(2)) # take a look at the dataset
Run Code Online (Sandbox Code Playgroud)

这将返回:

[
  (2, array('d', [0.26341307163238525, 0.1650490164756775, 0.118405282497406, -0.5976635217666626, -0.3913084864616394, -0.1379186064004898, …
Run Code Online (Sandbox Code Playgroud)

apache-spark apache-spark-ml apache-spark-mllib

8
推荐指数
1
解决办法
2694
查看次数

协同过滤添加新用户和项目

我正在为电影构建一个推荐引擎,并阅读了很多有用的信息。我从未见过提到的一件事是如何为新用户和项目提出建议。正常过程是:我建立我的模型并训练它。然后我输入一个用户以及我想为他们返回的前 k 个推荐。

现在,如果我想为不在我的初始稀疏评分矩阵中的用户执行此操作怎么办?如果我有这个新用户的稀疏电影评分数组,是否有一种简单的方法可以将其合并到模型中,而无需从头开始重新训练整个模型?

我知道基于内容的过滤用于解决 CF 的“冷启动”问题。即使我已经对这个新用户进行了一些评分,这是我唯一的选择吗?

现在我正在研究加权交替最小二乘法(WALS),最终我也想为 SGD 这样做。

recommendation-engine machine-learning collaborative-filtering

5
推荐指数
1
解决办法
2639
查看次数