Пример программы, реализующей коллаборативную фильтрацию для рекомендаций фильмов:
```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 наиболее похожих пользователей и выдает рекомендации на основе их оценок.
Пример использования демонстрирует, как получить рекомендации фильмов для определенного пользователя. Результатом программы является список идентификаторов фильмов, которые рекомендуется пользователю с указанным идентификатором.
Заметьте, что в данном примере использована СКАЧАТЬ