Вычисление разреженности
Как вы знаете, ALS хорошо работает с разреженными наборами данных. Давайте посмотрим, какая часть матрицы ratings на самом деле пуста.
Напомним, что разреженность вычисляется как отношение числа ячеек матрицы, содержащих оценку, к общему количеству значений, которые могла бы содержать матрица с учётом числа пользователей и объектов (фильмов). Иными словами, нужно разделить количество имеющихся оценок на произведение числа пользователей и фильмов в матрице, а затем вычесть результат из 1 — это и даст нам разреженность, то есть долю пустых ячеек матрицы ratings.
Это упражнение является частью курса
Построение рекомендательных систем с помощью PySpark
Инструкции к упражнению
- Вычислите
numerator(числитель) метрики разреженности, подсчитав общее количество оценок в матрицеratings. - Вычислите количество уникальных (
distinct()) значенийuserIdsиmovieIdsв матрицеratings. - Вычислите
denominator(знаменатель) метрики разреженности, умножив количество пользователей на количество фильмов в матрицеratings. - Вычислите и выведите разреженность: разделите
numeratorнаdenominator, вычтите результат из 1 и умножьте на 100. Значение1.0добавляется для того, чтобы разреженность возвращалась в виде числа с плавающей точкой, а не целого числа.
Интерактивное практическое упражнение
Попробуйте выполнить это упражнение, дополнив этот пример кода.
# Count the total number of ratings in the dataset
numerator = ____.select("____").count()
# Count the number of distinct userIds and distinct movieIds
num_users = ____.select("____").____().count()
num_movies = ____.select("____").____().count()
# Set the denominator equal to the number of users multiplied by the number of movies
denominator = ____ * ____
# Divide the numerator by the denominator
sparsity = (1.0 - (____ *1.0)/____)*100
print("The ratings dataframe is ", "%.2f" % sparsity + "% empty.")