阅读小程序协同过滤算法代码
时间: 2024-05-10 19:16:49 浏览: 63
以下是一个简单的小程序协同过滤算法的代码示例:
```python
# 定义一个用户评分矩阵,行代表用户,列代表商品,值代表用户对该商品的评分
ratings = [
[5, 3, 0, 2, 4],
[1, 0, 5, 4, 2],
[2, 4, 1, 0, 0],
[0, 3, 4, 2, 5]
]
# 计算每个用户之间的相似度,采用余弦相似度计算方法
def similarity(user1, user2):
sum_xy = 0
sum_x2 = 0
sum_y2 = 0
for i in range(len(user1)):
x = user1[i]
y = user2[i]
sum_xy += x * y
sum_x2 += pow(x, 2)
sum_y2 += pow(y, 2)
if sum_x2 == 0 or sum_y2 == 0:
return 0
else:
return sum_xy / (pow(sum_x2, 0.5) * pow(sum_y2, 0.5))
# 推荐算法的实现
def recommend(user_id, ratings):
# 找出用户未打分的商品
unrated_items = []
for i in range(len(ratings[user_id])):
if ratings[user_id][i] == 0:
unrated_items.append(i)
# 计算用户与其他用户的相似度
similarity_scores = []
for i in range(len(ratings)):
if i != user_id:
sim_score = similarity(ratings[user_id], ratings[i])
similarity_scores.append((i, sim_score))
# 按相似度从大到小排序
similarity_scores.sort(key=lambda x: x[1], reverse=True)
# 找出最相似的用户并获得他的评分列表
top_match = similarity_scores[0][0]
match_ratings = ratings[top_match]
# 计算每个未打分商品的推荐评分
recommendations = []
for i in unrated_items:
rating = 0
total_similarity = 0
for j in range(len(match_ratings)):
if match_ratings[j] != 0:
rating += match_ratings[j] * similarity(ratings[user_id], ratings[j])
total_similarity += similarity(ratings[user_id], ratings[j])
if total_similarity != 0:
recommendations.append((i, rating / total_similarity))
# 按推荐评分从大到小排序并返回前n个
recommendations.sort(key=lambda x: x[1], reverse=True)
return recommendations[:n]
```
这个代码示例中,我们首先定义了一个用户评分矩阵,然后实现了一个相似度计算函数和一个推荐算法函数。推荐算法函数首先找出用户未打分的商品,然后计算用户与其他用户的相似度,找出最相似的用户并获得他的评分列表,最后计算每个未打分商品的推荐评分并返回前n个。这个算法比较简单,但是可以作为协同过滤算法的基础,可以进一步优化和扩展。
阅读全文