Spark-保存ALS模型的目的



我试图理解存储ALS模型的目的是什么,以及使用存储模型的用例是什么。

我有一个超过300M行的数据集,我使用Hadoop集群和Spark来计算基于ALS算法的建议。整个计算大约需要5个小时,我想知道存储我的模型并在第二天使用它会是什么情况,例如……我没有看到。所以,要么我做错了什么(这是可能的,考虑到我是ML世界的初学者)或ALS算法在Spark和存储在磁盘上的可能性不是很有帮助。

现在,我这样使用它:

df_input = spark.read.format("avro").load(PATH, schema=SCHEMA)
als = ALS(maxIter=12, regParam=0.05, rank=15, userCol="user", itemCol="item", ratingCol="rating", coldStartStrategy="drop")
model = als.fit(df_input)
df_recommendations = model.recommendForAllUsers(10)

正如我提到的。df_input是包含超过300M行的DataFrame。总计算时间约为5h,之后我收到数据集中每个用户的10个推荐项目。

在许多教程或书籍中。有一个训练模型并用测试数据验证它的例子。比如:

df_input = spark.read.format("avro").load(PATH, schema=SCHEMA)
(training, test) = df_input.randomSplit(weights = [0.7, 0.3])
als = ALS(maxIter=12, regParam=0.05, rank=15, userCol="user", itemCol="item", ratingCol="rating", coldStartStrategy="drop")
model = als.train(training)
model.write().save("saved_model")
...
model = ALSModel.load('saved_model')
predictions = model.transform(test) // or df_input to get predictions for each user

我看不出这样使用它有什么好处。然而,我看到一个很大的缺点-你不使用30%的数据来训练模型
据我所知,没有一种方法可以在线(实时)使用ALS模型。至少不使用任何外部包/库。
您不能增量地更新此模型。
您不能将它用于新注册的用户,因为他们不存在于存储的矩阵分解中,因此不会有任何针对他们的建议。
你所能做的就是检查给定用户-物品对的预测。这与第一个代码示例(使用fit()方法)中的返回值基本相同

将此模型存储在磁盘上并在需要时加载它的原因是什么?或者什么时候(应该满足什么条件)我应该考虑存储模型并重用它?您能提供一个用例吗?

正如你所说,拟合一个模型可能需要5个小时。假设你有成千上万的日常用户,你会为每个用户训练模型吗,每次他们需要一些推荐的时候?不…

您可以保存训练好的模型,并使用它为用户提供建议。

每当记录新数据时,您可以设计系统在阈值之后重新训练模型,例如1000个新日志。(你可以使用Apache Kafka来实时流数据)。

如果您想为新用户推荐,您可以在新用户记录了特定数量的操作(特定于您的业务用例)之后重新训练模型

最新更新