Страница 8 из 11
recommended_movies = recommend_movies(user_id, ratings)
print(f"Рекомендованные фильмы для пользователя {user_id}:")
for movie_id in recommended_movies:
print(f"Фильм {movie_id}")
```
В данном примере используется матрица оценок пользователей `ratings`, где каждая строка соответствует пользователю, а каждый столбец соответствует фильму. Оценки фильмов могут принимать значения от 0 до 5, где 0 обозначает отсутствие оценки.
Функция `compute_similarity` вычисляет схожесть пользователей на основе корреляции Пирсона. Она сравнивает оценки двух пользователей, игнорируя нулевые значения, и вычисляет коэффициент корреляции.
Функция `recommend_movies` принимает идентификатор пользователя и матрицу оценок в качестве входных данных. Она вычисляет схожесть пользователя с остальными пользователями, выбирает топ-N наиболее похожих пользователей и выдает рекомендации на основе их оценок.
Пример использования демонстрирует, как получить рекомендации фильмов для определенного пользователя. Результатом программы является список идентификаторов фильмов, которые рекомендуется пользователю с указанным идентификатором.
Заметьте, что в данном примере использована простая реализация коллаборативной фильтрации. В реальных приложениях рекомендательных систем может потребоваться более сложные алгоритмы и обработка больших объемов данных.
Пример более сложной реализации коллаборативной фильтрации с использованием алгоритма Singular Value Decomposition (SVD) для рекомендаций фильмов:
import numpy as np
from scipy.sparse import csr_matrix
from scipy.sparse.linalg import svds
# Пример матрицы оценок пользователей
ratings = np.array([
[5.0, 4.0, 0.0, 0.0, 0.0, 0.0],
[0.0, 0.0, 4.0, 0.0, 5.0, 0.0],
[0.0, 0.0, 0.0, 2.0, 4.0, 5.0],
[4.0, 0.0, 0.0, 0.0, 0.0, 4.0]
])
# Выполнение сингулярного разложения (SVD)
def perform_svd(ratings, k):
# Преобразование матрицы оценок в разреженную матрицу
sparse_ratings = csr_matrix(ratings)
# Применение SVD для получения матриц U, Sigma и Vt
U, Sigma, Vt = svds(sparse_ratings, k)
# Построение диагональной матрицы Sigma
Sigma = np.diag(Sigma)
return U, Sigma, Vt
# Функция рекомендации фильмов для пользователя
def recommend_movies(user_id, ratings, U, Sigma, Vt, num_recommendations=5):
user_ratings = ratings[user_id]
predicted_ratings = np.dot(np.dot(U[user_id, :], Sigma), Vt)
# Исключение уже оцененных фильмов из рекомендаций
predicted_ratings[user_ratings != 0] = -1
top_movies = np.argsort(predicted_ratings)[::-1][:num_recommendations]
return top_movies
# Пример использования
user_id = 0
k = 2 # Размерность скрытого пространства
U, Sigma, Vt = perform_svd(ratings, k)
recommended_movies = recommend_movies(user_id, ratings, U, Sigma, Vt)
print(f"Рекомендуемые фильмы для пользователя {user_id}:")
for movie_id in recommended_movies:
print(f"Фильм {movie_id}")
```
В данном примере используется алгоритм Singular Value Decomposition (SVD) для выполнения сингулярного разложения матрицы оценок пользователей. Полученные матрицы U, Sigma и Vt представляют собой аппроксимацию исходной матрицы оценок с использованием латентного пространства низкой размерности.
Функция `perform_svd` выполняет сингулярное разложение матрицы оценок с помощью функции `svds` из модуля `scipy.sparse.linalg`. Разложение возвращает матрицы U, Sigma и Vt.
Функция `recommend_movies` принимает идентификатор пользователя, матрицу оценок, а также матрицы U, Sigma и Vt в качестве аргументов. Она вычисляет предсказанные оценки для пользователя и рекомендует фильмы, имеющие наивысшие предсказанные оценки, исключая уже оцененные фильмы.
В приведенном примере выводится список рекомендованных фильмов для пользователя с идентификатором 0. Количество рекомендаций задается параметром `num_recommendations`.
Singular Value Decomposition (SVD), или Сингулярное разложение, является мощным алгоритмом линейной алгебры, который используется в различных областях, включая рекомендательные системы, сжатие данных, обработку изображений и многие другие.
Сингулярное разложение позволяет представить матрицу в виде произведения трех матриц: U, Sigma и Vt. Формально, для матрицы A размерности m x n SVD определяется следующим образом:
A = U * Sigma * Vt,
где U – матрица размерности m x m, содержащая левые сингулярные векторы,
Sigma – диагональная матрица размерности m x n, содержащая сингулярные значения,
Vt – транспонированная матрица размерности n x n, содержащая правые сингулярные векторы.
Сингулярные значения в матрице Sigma являются неотрицательными числами и упорядочены по убыванию. Они представляют собой меру важности каждого сингулярного вектора и определяют вклад каждого сингулярного вектора в исходную матрицу A.
При использовании SVD в рекомендательных системах, например, матрица A представляет собой матрицу оценок пользователей, где строки соответствуют пользователям, а столбцы – элементам (фильмам, продуктам и т.д.). SVD разделяет матрицу на скрытые факторы, представленные сингулярными векторами, и связывает их с пользователями и элементами. Это позволяет рекомендовать пользователям элементы, которые им могут понравиться, на основе сходства с другими пользователями или элементами.
Алгоритм SVD имеет несколько вариаций, которые могут быть использованы в зависимости от контекста и требований задачи. Некоторые из них включают Truncated SVD (SVD с ограниченным числом сингулярных значений), Implicit Matrix Factorization (IMF) и другие.
SVD является мощным инструментом для анализа данных и позволяет снизить размерность данных, извлекать важные признаки и находить скрытые паттерны. Вместе с тем, алгоритм SVD требует значительных вычислительных ресурсов и может столкнуться с проблемами при обработке больших объемов данных. Поэтому для больших наборов данных используются приближенные методы SVD или альтернативные алгоритмы, такие как алгоритмы матричной факторизации.
Однако, SVD по-прежнему остается важным инструментом в области рекомендательных систем и других задач, где требуется анализ больших матриц данных.
Контекстная фильтрация
Еще одним распространенным методом является контентная фильтрация. Контентная фильтрация – это метод рекомендательных систем, который основывается на анализе характеристик элементов и предпочтений пользователей. В контексте контентной фильтрации, каждый элемент (товар, статья, фильм и т.д.) характеризуется набором признаков или характеристик, которые описывают его содержание или свойства.
Процесс контентной фильтрации начинается с анализа характеристик элементов и их значимости для пользователей. Характеристики элементов могут включать такие атрибуты, как автор, жанр, ключевые слова, рейтинги и другие свойства, которые могут быть извлечены из содержания элемента или предоставлены вручную.
Далее, на основе характеристик элементов, строится профиль пользователя, который отражает его предпочтения и интересы. Профиль пользователя может быть создан путем анализа предыдущих взаимодействий пользователя с элементами, например, его рейтинги или история просмотров.
Затем, используя различные алгоритмы сходства, производится сравнение между профилем пользователя и характеристиками элементов. Целью является определение степени сходства между предпочтениями пользователя и характеристиками элементов.
На основе этого сравнения, система ранжирует и рекомендует пользователю элементы, которые наиболее соответствуют его предпочтениям. Например, если пользователь предпочитает фильмы определенного жанра, система может рекомендовать ему фильмы схожего жанра.