Я использую метод computeSVD
из класса Spark IndexedRowMatrix
(в Scala). Я заметил, что у него нет метода setSeed()
. Я получаю немного разные результаты для нескольких прогонов одной и той же входной матрицы, возможно, из-за внутреннего алгоритма, используемого Spark. Хотя он тоже реализует приблизительный масштабируемый алгоритм SVD, я бы сказал из исходников, что computeSVD()
из IndexedRowMatrix
применяется не приблизительный, а точный вариант.
Так как я делаю рекомендации по результатам SVD, а матрицы пользовательских и латентных факторов разные, я фактически получаю разные списки рекомендаций: в некоторых прогонах примерно одни и те же элементы в разном порядке, иногда в список попадает несколько новых элементов и некоторые из них отсутствуют, потому что предсказанные рейтинги часто почти равны после выполнения вменения на отсутствующей матрице входных рейтингов, которая передается в computeSVD()
.
У кого еще возникла эта проблема? Есть ли способ сделать это полностью детерминированным, или я что-то упускаю?
Спасибо
computeSVD
использует отtreeAggregate
доcomputeGramianMatrix
) в Spark недетерминирован, в результатах ожидаются некоторые колебания. Поскольку ГСЧ не задействован, установка начального числа не имеет никакого значения. - person zero323   schedule 25.11.2018