Какую точную форму использует процедура рекомендации ALS MLLIB для матрицы достоверности? - PullRequest
0 голосов
/ 23 декабря 2018

Пакет рекомендаций pyspark ml включает реализацию ALS, основанную на статье Ху, Корена и Волинского: http://yifanhu.net/PUB/cf.pdf для наборов данных неявной обратной связи.

https://spark.apache.org/docs/2.3.0/ml-collaborative-filtering.html https://spark.apache.org/docs/2.3.1/api/python/_modules/pyspark/mllib/recommendation.html

Какую точную форму использует искра для генерации матрицы достоверности из матрицы наблюдений и параметра альфа, который контролирует степень достоверности?Использует ли spark 1 + alpha * r_ui для всех значений r_ui (ноль и ненулевое значение) или что-то еще?

Предполагается, что реализация здесь задана в строке 1683: https://github.com/apache/spark/blob/master/mllib/src/main/scala/org/apache/spark/ml/recommendation/ALS.scala

у нас есть:

        if (implicitPrefs) {
          // Extension to the original paper to handle rating < 0. confidence is a function
          // of |rating| instead so that it is never negative. c1 is confidence - 1.
          val c1 = alpha * math.abs(rating)
          // For rating <= 0, the corresponding preference is 0. So the second argument of add
          // is only there for rating > 0.
          if (rating > 0.0) {
            numExplicits += 1
          }
          ls.add(srcFactor, if (rating > 0.0) 1.0 + c1 else 0.0, c1)
        } else {
          ls.add(srcFactor, rating)
          numExplicits += 1
        }

Почему третий аргумент ls.add () передается как c1, а не 1 + c1?Посмотрим, как ls.add () работает с классом NormalEquation в строке 850:

def add(a: Array[Float], b: Double, c: Double = 1.0): this.type = {
  require(c >= 0.0)
  require(a.length == k)
  copyToDouble(a)
  blas.dspr(upper, k, c, da, 1, ata)
  if (b != 0.0) {
    blas.daxpy(k, b, da, 1, atb, 1)
  }
  this
}

, почему имеет смысл использовать c1 = alpha * | rating |вместо 1 + c1, в вызове blas.dspr ()?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...