По мере развития искусственного интеллекта и машинного обучения потребность в них становится все больше. Система рекомендаций как часть машинного обучения — одно из средств, чтобы начать входить в этот мир. Матричная факторизация — это один из подходов в системе рекомендаций, который широко используется из-за его высокой предсказуемости и легкости в освоении.

На этот раз созданная система рекомендаций будет предоставлять пользователям рекомендации фильмов с использованием набора данных Movielens 20M и написана на Python с помощью Jupyter Notebook, предоставленного Conda. Прежде чем начать давать рекомендации, необходимо подготовить несколько библиотек, а именно FindSpark, PySpark и Pandas. Первое, что нужно сделать, это импортировать библиотеку Spark, а затем инициализировать ее.

import findspark
findspark.init()
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName('movie_recommender').
        getOrCreate()

Затем импортируйте набор данных с пандами, затем сохраните его с именем «фильм», здесь будут храниться только данные фильма, и в нем нет оценки или пользователя. Из существующего набора данных понадобятся только столбцы «movieId» и «title».

import pandas as pd
movie = pd.read_csv(“movie.csv”)
movie = movie.loc[:,[“movieId”, “title”]]
movie.head(10)

После получения данных о фильмах следующим шагом будет получение данных о рейтинге фильмов пользователя, точно так же, как и с данными выше. Из существующего набора данных потребуются столбцы «userId», «movieId» и «rating».

rating = pd.read_csv(“rating.csv”)
print(rating.columns)
rating = rating.loc[:,[“userId”, “movieId”, “rating”]]
rating.head(10)

Затем из существующих данных о фильмах и рейтингах они будут объединены, и здесь будет использоваться только 1 миллион данных из 20 миллионов в наборе данных.

data = pd.merge(movie, rating)
data = data.iloc[:1000000,:]
data.head(10)

Данные настроены, и мы начнем давать рекомендации. Начиная с импорта важных библиотек из Pyspark, на этот раз рекомендация будет выполняться с помощью ALS, а для проверки рекомендации будет выполняться с помощью среднеквадратичной ошибки.

from pyspark.ml.evaluation import RegressionEvaluator
from pyspark.ml.recommendation import ALS
from pyspark.ml.feature import StringIndexer
from pyspark.ml import Pipeline
from pyspark.sql.functions import col

Поскольку доступные данные находятся в форме Pandas DataFrame, данные необходимо сначала преобразовать в Spark DataFrame.

sparkdf = spark.createDataFrame(data)

Данные, которые были преобразованы в форму Spark DataFrame, затем вводятся в StringIndexer, который затем используется в качестве конвейера.

indexer = [StringIndexer(inputCol=column, outputCol=column+”_index”)        
          for column in list(set(sparkdf.columns)-set([‘rating’]))]
pipeline = Pipeline(stages=indexer)
transformed = pipeline.fit(sparkdf).transform(sparkdf)
transformed.show()

Войдите в стадию рекомендаций, сначала разделите данные на тестовые данные и обучающие данные со сравнением 20% тестовых данных и 80% обучающих данных. Затем модель разрабатывается с использованием библиотеки искр ALS, а затем обучается модель.

(train, test) = transformed.randomSplit(([0.8, 0.2]))
als = ALS(maxIter=5, regParam=0.09, rank=25, userCol="userId_index", 
      itemCol="movieId_index", ratingCol="rating", 
          coldStartStrategy="drop", nonnegative=True)
model = als.fit(train)

затем сделайте прогноз рейтинга с подготовленными тестовыми данными

predictions = model.transform(test)
predictions.show()

Это все, что касается применения матричной факторизации в рекомендациях по фильмам, из этого приложения оно по-прежнему очень открыто для изучения, начиная с повышения точности и заканчивая наилучшей производительностью, пропорциональной точности, хорошего дня.