畢設要用到推薦算法,于是今天在在網上查找資料,找到這位仁兄的資料https://blog.csdn.net/Gamer_gyt/article/details/51346159
#!/usr/sbin/env python
# -*- coding:utf-8 -*-
import math
# ItemCF算法
def ItemSimilarity(train):
# 物品-物品的共同矩陣
C = dict()
# 物品被多少個不同使用者購買
N = dict()
for u, items in train.items():
for i in items.keys():
N.setdefault(i, 0)
N[i] += 1
C.setdefault(i, {})
for j in items.keys():
if i == j:
continue
C[i].setdefault(j, 0)
C[i][j] += 1
# 計算相似度矩陣
W = dict()
for i, related_items in C.items():
W.setdefault(i, {})
for j, cij in related_items.items():
W[i][j] = cij / math.sqrt(N[i] * N[j])
return W
# 推薦前K個使用者
def Recommend(train, user_id, W, K):
rank = dict()
action_item = train[user_id]
for item, score in action_item.items():
for j, wj in sorted(W[item].items(), key=lambda x:x[1], reverse=True)[0:K]:
if j in action_item.keys():
continue
rank.setdefault(j, 0)
rank[j] += score * wj
print rank.items()
return sorted(rank.items(), key=lambda x:x[1], reverse=True)
train = dict()
for line in open('requests.txt', 'r'):
user, item, score = line.strip().split(",")
train.setdefault(user, {})
train[user][item] = float(score)
W = ItemSimilarity(train)
result = Recommend(train, '5', W, 3)
print result
requests.txt
1,101,5.0
1,102,3.0
1,103,2.5
2,101,2.0
2,102,2.5
2,103,5.0
2,104,2.0
3,101,2.0
3,104,4.0
3,105,4.5
3,107,5.0
4,101,5.0
4,103,3.0
4,104,4.5
4,106,4.0
5,101,4.0
5,102,3.0
5,103,2.0
5,104,4.0
5,105,3.5
5,106,4.0
将資料整理到excel表中

最後驗證輸出結果為:
分别對1,2,3,4,5使用者進行驗證,發現可以推薦出最适合的,完成。
最後還是感謝這位仁兄了https://blog.csdn.net/Gamer_gyt/article/details/51346159
初次研究算法這方面,有不足之處還請指導。