Что такое ранжирование в алгоритме обучения машине ALS в Apache Spark Mllib

Я хотел попробовать пример алгоритма машинного обучения 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

Как вы сказали, ранг относится к предполагаемым скрытым или скрытым факторам. Например, если вы измеряли, насколько разные люди любили фильмы и пытались перепрофилировать их, у вас может быть три поля: человек, фильм, количество звезд. Теперь давайте скажем, что вы были всезнающим, и вы знали абсолютную истину, и вы знали, что на самом деле все рейтинги фильмов можно было бы точно предсказать только тремя скрытыми факторами, сексом, возрастом и доходом. В этом случае "ранг" вашего прогона должен быть 3.

Конечно, вы не знаете, сколько основных факторов, если таковые имеются, приводят ваши данные, поэтому вы должны угадать. Чем больше вы используете, тем лучше результаты до точки, но тем больше времени на память и вычисление вам понадобится.

Один из способов работы - начать с ранга 5-10, затем увеличить его, скажем, 5 за раз, пока ваши результаты не улучшатся. Таким образом, вы определяете лучший ранг для своего набора данных путем экспериментов.