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