Размер шрифта
-
+

Машинное обучение - стр. 16

Пример программы, реализующей коллаборативную фильтрацию для рекомендаций фильмов:

```python

import numpy as np

# Пример матрицы оценок пользователей

ratings = np.array([

[5, 4, 0, 0, 0, 0],

[0, 0, 4, 0, 5, 0],

[0, 0, 0, 2, 4, 5],

[4, 0, 0, 0, 0, 4]

])

# Вычисление схожести пользователей на основе корреляции Пирсона

def compute_similarity(user1, user2):

mask = np.logical_and(user1 != 0, user2 != 0)

if np.sum(mask) == 0:

return 0

return np.corrcoef(user1[mask], user2[mask])[0, 1]

# Функция рекомендации фильмов для пользователя

def recommend_movies(user_id, ratings, num_recommendations=5):

num_users, num_movies = ratings.shape

# Вычисление схожести пользователя с остальными пользователями

similarities = []

for i in range(num_users):

if i != user_id:

similarity = compute_similarity(ratings[user_id], ratings[i])

similarities.append((i, similarity))

similarities.sort(key=lambda x: x[1], reverse=True)

# Выбор топ-N наиболее похожих пользователей

top_similar_users = [similarity[0] for similarity in similarities[:num_recommendations]]

# Получение рекомендаций на основе оценок похожих пользователей

recommendations = np.zeros(num_movies)

for user in top_similar_users:

recommendations += ratings[user]

recommendations = np.where(ratings[user_id] == 0, recommendations, 0)

top_movies = np.argsort(recommendations)[::-1][:num_recommendations]

return top_movies

# Пример использования

user_id = 0

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):

# Преобразование матрицы оценок в разреженную матрицу

Страница 16