如何在Spark中确定ALS.transImplicit中的偏好/置信度?

时间:2016-08-03 20:01:00

标签: pyspark apache-spark-mllib

我在Spark中使用trainsimplicit中的ALS。  在文档页面中http://spark.apache.org/docs/latest/api/python/pyspark.mllib.html#pyspark.mllib.recommendation.ALS.trainImplicit,使用trainImplicit(ratings, rank, iterations=5, lambda_=0.01, blocks=-1, alpha=0.01, nonnegative=False, seed=None)来训练模型。

我的问题是,我们应该将ratings作为(user, product, view times/watching time >0)输入吗? 还是(user, product, preference = 0/1)

同时,我注意到如果alpha =0.01更改为其他值,结果将会有所不同。我们怎样才能知道在培训期间Spark中使用了哪些偏好置信关系,例如c = 1 + alpha * r1+ alpha * log(1+r/e)r可能是持续时间还是频次数?)

我还注意到,在网络https://spark.apache.org/docs/1.4.0/api/python/_modules/pyspark/mllib/recommendation.html#ALS.trainImplicit中,cls类方法中有trainsimplicit。这是一种定义偏好 - 置信关系的方法吗?

非常感谢!

1 个答案:

答案 0 :(得分:1)

隐含偏好的含义是,每次用户查看/观看产品时,您的信心都会增加。正确? 因此输入应为(user, product, view times/watching time >0) 如果将输入限制为0/1首选项,则只是丢失信息。

我从original spark code

看到的
if (implicitPrefs) {
  // Extension to the original paper to handle b < 0. confidence is a function of |b|
  // instead so that it is never negative. c1 is confidence - 1.0.
  val c1 = alpha * math.abs(rating)
  // For rating <= 0, the corresponding preference is 0. So the term below is only added
  // for rating > 0. Because YtY is already added, we need to adjust the scaling here.
  if (rating > 0) {
    numExplicits += 1
    ls.add(srcFactor, (c1 + 1.0) / c1, c1)
  }
} 

ALS使用线性依赖的修改版本。

我从未见过有关此文件的任何文件