Алгоритм ALS Spark MLlib - Как получить свои «Личные рекомендации» (рейтинг фильмов, которые я не оценивал) - PullRequest
0 голосов
/ 08 февраля 2019

Я использую PySpark в Azure Databricks.Я использовал алгоритм ALS библиотеки Sparks MLlib для прогнозирования рейтингов фильмов, который работает успешно.Тем не менее, я пытаюсь добавить фрейм данных, состоящий из моих оценок для 10 случайно выбранных фильмов.Когда я делаю это, я получаю только предсказание рейтинга для фильмов, которые я уже оценил

Я хочу иметь возможность использовать модель для получения рекомендаций на основе их рейтинга.

У меня есть Spark Code, который выполняет следующие задачи:

  • Импортирует данные (RatingsSmall, MoviesSmall, RatingsLarge, Movies Large)

  • Объединяет рейтинги с небольшими фильмами, Объединяет рейтинги с большими фильмами

  • Добавить к двум новым наборам данных вместе

  • Удалить нерелевантные столбцы Timestamp и Genre

Теперь у меня есть чистая таблица с MovieID, Title (Название фильма), Идентификатор пользователя и рейтинг.Я покажу код с этой точки.Если вы хотите получить код до этого, я могу отправить его тоже.

  • Разделить данные на обучающие и тестовые наборы (0,80, 0,20)

  • Алгоритм ALS

  • Отображение прогнозов.

Надеемся, что вышеизложенное поможет вам разобраться с кодом, который я прикрепил.Я получаю прогнозы только для того рейтинга, который я уже представил.

Я пытался присоединить свой рейтинг к тренировочному набору.Отсюда я хотел бы получить рекомендации или прогнозы для других фильмов в наборе данных.

Моя попытка: импортировать DF с моими собственными рейтингами.Добавил это (UnionAll) к тренировочному набору.Получил прогнозы (но только для фильмов, которые я уже оценил)

код:

#Split dataset

    training, test = All_Movies.randomSplit([0.8, 0.2])
    from pyspark.ml.recommendation import ALS

    from pyspark.ml.evaluation import RegressionEvaluator

#Set up model

    ALS = ALS(maxIter=10, regParam=0.01, userCol = "userId",itemCol="movieId", ratingCol="rating",  coldStartStrategy="drop")

#Fit model to Training set and attach personal recomendations


     model = ALS.fit(training.unionAll(PersonalDF)) #PersonalDF is my rankings

#Get Predictions for Test Set
    predictions = model.transform(test).dropna()

#All good up until here.

#Trying to get prediction rankings for my movies
    mySampledMovies = model.transform(PersonalDF) 
    mySampledMovies.registerTempTable("mySampledMovies")

    display(sqlContext.sql("select userId, movieId, rating,title, prediction from mySampledMovies"))

Я ожидаю DataFrame, который говорит мой идентификатор пользователя, MovieID, Рейтинг, Прогноз.Для фильмов я не видел, чтобы рейтинг был N / A или Null и Predictions, чтобы иметь значение.

Большое спасибо

...