Pyspark 如何确定Spark中ALS.transImplicit的偏好/信心?

Pyspark 如何确定Spark中ALS.transImplicit的偏好/信心?,pyspark,apache-spark-mllib,Pyspark,Apache Spark Mllib,我正在Spark中使用来自ALS的trainsimplicit。 从文档页面:,使用trainImplicit(评级、排名、迭代次数=5、lambda_uu2;=0.01、blocks=-1、alpha=0.01、nonnegative=False、seed=None)来训练模型 我的问题是,我们是否应该将评级输入为(用户、产品、查看次数/观看时间>0)? 或(用户、产品、首选项=0/1) 同时,我注意到如果将alpha=0.01更改为其他值,结果将不同。我们如何知道训练期间Spark中使用了哪

我正在Spark中使用来自
ALS
trainsimplicit
。 从文档页面:,使用
trainImplicit(评级、排名、迭代次数=5、lambda_uu2;=0.01、blocks=-1、alpha=0.01、nonnegative=False、seed=None)
来训练模型

我的问题是,我们是否应该将
评级
输入为
(用户、产品、查看次数/观看时间>0)
? 或
(用户、产品、首选项=0/1)

同时,我注意到如果将
alpha=0.01
更改为其他值,结果将不同。我们如何知道训练期间Spark中使用了哪些偏好置信关系,如
c=1+alpha*r
1+alpha*log(1+r/e)
r
可能是持续时间或频率数)

我还注意到,在web中,
trainsimplicit
classmethod中有
cls
。这是定义偏好-信心关系的一种方法吗


非常感谢

隐式偏好的含义是,每次用户查看/观看产品时,您的信心都会增强。对的 因此,输入应该是
(用户、产品、查看次数/观看时间>0)
如果您将输入限制为0/1首选项,则只会丢失信息

从照片上看

if(隐式prefs){
//扩展到原始纸张以处理b<0。置信度是| b的函数|
//所以它永远不会是负的,c1是置信度-1.0。
val c1=α*数学绝对值(额定值)
//因为YtY已经被添加了,我们需要在这里调整比例。
如果(评级>0){
numExplicits+=1
加上(系数(c1+1.0)/c1,c1)
}
} 
ALS使用线性相关的修改版本


不过,我从来没有看过任何关于这方面的文档。但是我们如何知道ALS在训练模型中使用
confidence=1+alpha*r
confidence=1+alpha*log(1+r/e)
?此处
r=查看时间/观看时间
,任意实数和>0。
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)
  }
}