Я реализую матричную факторизацию, чтобы предсказать рейтинг фильма рецензентом. Набор данных берется из MovieLen (http://grouplens.org/datasets/movielens/). Это хорошо изученная проблема с рекомендациями, поэтому я просто реализую этот метод матричной факторизации для своей цели обучения.Scikit-learn - Stochastic Gradient Descent с пользовательскими функциями расхода и градиента
Я моделирую функцию стоимости как среднеквадратичную ошибку между прогнозируемым рейтингом и фактическим рейтингом в наборе учебных материалов. Я использую функцию scipy.optimize.minimize (я использую сопряженный градиентный спуск), чтобы повлиять на матрицу рейтинга фильмов, но этот инструмент оптимизации слишком медленный даже для всего набора данных с элементами 100K. Я планирую масштабировать свои алгоритмы для набора данных с 20 миллионами элементов.
Я искал решение на основе Python для Stochastic Gradient Descent, но стохастический градиентный спуск, который я нашел на scikit-learn, не позволяет использовать мои пользовательские функции расхода и градиента.
Я могу реализовать свой собственный стохастический градиентный спуск, но я проверяю с вами, ребята, если есть инструмент для этого.
В принципе, мне интересно, если есть такие, как API, который похож на это:
optimize.minimize(my_cost_function,
my_input_param,
jac=my_gradient_function,
...)
Спасибо! Un
Есть две вещи, на которые вы должны обратить внимание: (1) векторизовать/распараллеливать библиотеки матриц и (2) конвергенцию размера шага градиента. Выделите функцию затрат по сравнению с итерацией, чтобы увидеть, может ли размер шага сделать его быстрее. Вы можете взять слишком много маленьких шагов, чтобы сходиться к решению. – duffymo
Спасибо за ответ. Хорошая точка в размере шага. – unaki