По мере развития искусственного интеллекта и машинного обучения потребность в них становится все больше. Система рекомендаций как часть машинного обучения — одно из средств, чтобы начать входить в этот мир. Матричная факторизация — это один из подходов в системе рекомендаций, который широко используется из-за его высокой предсказуемости и легкости в освоении.
На этот раз созданная система рекомендаций будет предоставлять пользователям рекомендации фильмов с использованием набора данных 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()
Это все, что касается применения матричной факторизации в рекомендациях по фильмам, из этого приложения оно по-прежнему очень открыто для изучения, начиная с повышения точности и заканчивая наилучшей производительностью, пропорциональной точности, хорошего дня.