Apache Spark Mllib中ALS机器学习算法中的rank是什么?

16

我想尝试一下ALS机器学习算法的例子。我的代码运行得很好,但是我不理解算法中使用的参数rank

以下是我的Java代码:

    // Build the recommendation model using ALS
    int rank = 10;
    int numIterations = 10;
    MatrixFactorizationModel model = ALS.train(JavaRDD.toRDD(ratings),
            rank, numIterations, 0.01);

我曾经在某个地方读到过,这是模型中的潜在因素数量。

假设我有一个包含100行的数据集(用户、产品、评分),那么rank(潜在因素)的值应该是多少?

1个回答

28

正如您所说的,排名是指假定的潜在或隐藏因素。例如,如果您正在测量不同人对电影的喜好程度并试图进行交叉预测,那么您可能会有三个字段:人、电影和星级数量。现在,假设您是全知者,您知道绝对的真相,您知道实际上所有电影评分只能由三个隐藏因素完美预测,即性别、年龄和收入。在这种情况下,您的运行的“排名”应该是3。

当然,您不知道驱动数据的潜在因素是否存在以及有多少个,因此您必须猜测。使用的因素越多,在一定程度上结果越好,但需要更多的内存和计算时间。

一种处理方法是从5-10的等级开始,然后每次增加5,直到结果不再改善为止。通过实验确定数据集的最佳排名。


Tyler,感谢您提供这么好的解释。然而,我在这里有一个问题,我们假设的潜在因素,它们只包括用户的(选择、兴趣),还是也可能包括物品的特征? - hard coder
1
这完全是数据的特征。 - Tyler Durden
如果您能够为Lambda提供尽可能精确的响应,我相信这是ALS用于Rank的唯一其他参数... 这是我找到的最佳答案。 - Dan Ciborowski - MSFT
“Rank” 控制着必须从数据中拟合的内部参数数量。如果太多,您会过度拟合训练集,而不是进行泛化学习。因此,更多并不意味着更好,但随着数据集的增长,您可能可以通过增加它来改善情况。 - George Forman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接