Питання
Як я можу передбачити рейтинг нового користувача в моделі ALS, що навчається в Spark? (Нове = не бачилося під час тренувань)
Проблема
Я переглядаю офіційний підручник Spark ALS тут:
http://ampcamp.berkeley.edu/big-data-mini-course/movie-recommendation-with-mllib.html
Я в змозі створити хороший рекомендатор з гідним MSE, але я намагаюся ввести нові дані в модель. Підручник змінює рейтинги першого користувача перед навчанням, але це справді хак. Вони дають таку підказку:
9.2. Коефіцієнти матриці збільшення:
У цьому підручнику ми додаємо ваші оцінки до навчального набору. Кращий спосіб отримати рекомендації для вас - це спершу підготувати модель факторизації матриць, а потім доповнити модель за допомогою своїх оцінок. Якщо вам це здається цікавим, ви можете поглянути на реалізацію MatrixFactorizationModel і подивитися, як оновити модель для нових користувачів та нових фільмів.
Хоча реалізація мені зовсім не допомагає. В ідеалі я шукаю щось на зразок:
predictions = model.predictAllNew(newinput)
Але не існує такого методу. Я міг би змінити оригінальний RDD, але я думаю, що це вимагатиме від мене перевдосконалити модель, так що це не було б ідеальним рішенням. Напевно, повинен бути більш елегантний спосіб?
Де я зараз:
Я думаю, що мені потрібно знайти латентне зображення нового вектора. Згідно з оригінальним документом, ми можемо обчислити так:
Моя поточна спроба:
V = model.productFeatures().map(lambda x: (x[1])).collect() #product latent matrix Y
Cui = alpha * np.abs(newinput)
Cui = (1. + Cui) / (Cui)
Cui[np.where(newinput == 0)] = 0
Cui = np.diag(Cui)
lambdaI = len(np.where(newinput!=0)) * regularization_parameter * np.eye(np.shape(V)[1]) #
term = np.dot(np.dot(Vt,Cui),V)+lambdaI
term = np.dot(np.linalg.inv(term),Vt)
term = np.dot(term,Cui)
term = np.dot(term,newinput)
latentinput = term
Але це не відповідає.