基于协同过滤算法的新闻资讯推荐系统代码
时间: 2024-05-25 19:06:49 浏览: 18
基于协同过滤算法的新闻资讯推荐系统是一种常见的个性化推荐系统,下面是一个简单的代码示例:
```python
import numpy as np
# 构建用户-新闻评分矩阵
ratings = np.array([
[5, 4, 0, 0, 1],
[0, 0, 5, 4, 2],
[1, 2, 0, 0, 5],
[0, 0, 4, 5, 1],
[2, 1, 0, 0, 4]
])
# 计算用户之间的相似度(使用余弦相似度)
def cosine_similarity(user1, user2):
dot_product = np.dot(user1, user2)
norm_user1 = np.linalg.norm(user1)
norm_user2 = np.linalg.norm(user2)
return dot_product / (norm_user1 * norm_user2)
# 根据用户相似度进行推荐
def recommend(user_id, ratings):
num_users = ratings.shape[0]
similarities = []
for i in range(num_users):
if i != user_id:
similarity = cosine_similarity(ratings[user_id], ratings[i])
similarities.append((i, similarity))
similarities.sort(key=lambda x: x[1], reverse=True)
# 取相似度最高的前几个用户进行推荐
top_users = similarities[:3]
# 统计推荐新闻的得分
news_scores = {}
for user in top_users:
user_id = user[0]
similarity = user[1]
for i in range(len(ratings[user_id])):
if ratings[user_id][i] > 0 and ratings[user_id][i] < 5:
if i not in news_scores:
news_scores[i] = 0
news_scores[i] += ratings[user_id][i] * similarity
# 根据得分排序并返回推荐结果
recommended_news = sorted(news_scores.items(), key=lambda x: x[1], reverse=True)
return recommended_news
# 示例使用
user_id = 0
recommended_news = recommend(user_id, ratings)
print("推荐给用户{}的新闻:".format(user_id))
for news in recommended_news:
news_id = news[0]
score = news[1]
print("新闻ID:{},得分:{}".format(news_id, score))
```
这段代码实现了一个简单的基于协同过滤算法的新闻资讯推荐系统。首先,构建了一个用户-新闻评分矩阵,然后计算用户之间的相似度(使用余弦相似度),根据相似度进行推荐。最后,根据推荐结果进行排序并输出。