# -*- coding: utf-8 -*-
# @date : 2019-02-14
# @author : peng shiyu
from copy import deepcopy
import numpy as np
from sklearn.feature_extraction import dictvectorizer
from sklearn.metrics.pairwise import cosine_similarity
# 資料準備:
# user =
user1 =
user2 =
user3 =
user4 =
data =
[ user1,
user2,
user3,
user4
]# 特徵提取
dict_vectorizer = dictvectorizer(dtype=np.int32, sparse=
false
)result = dict_vectorizer.fit_transform(data)
books = dict_vectorizer.get_feature_names(
)print
(dict_vectorizer.get_feature_names())
print
(result)
# 余弦相似度矩陣
user_similarity = cosine_similarity(result)
print
(user_similarity)
for user_id, user_looked in
enumerate
(data)
: user_suggest = user_similarity[user_id]
.tolist(
)# 找到與之相似度最高的兩個人
user_suggest_bak = deepcopy(user_suggest)
user_suggest_bak.sort(reverse=
true
) max_similar = user_suggest_bak[1:
3]print
(max_similar)
max_index =
list
(map
(user_suggest.index, max_similar)
)print
(max_index)
suggest =
for index, user in
enumerate
([data[i]
for i in max_index]):
for key, value in user.items():
if key not
in user_looked:
suggest[key]
= user_suggest[index]
* value
print
(suggest)
"""['三國演義', '水滸傳', '紅樓夢', '西遊記']
[[0 0 4 3]
[0 3 5 6]
[5 0 4 3]
[5 0 0 4]]
[[1. 0.90837374 0.70710678 0.37481703]
[0.90837374 1. 0.64231723 0.44799204]
[0.70710678 0.64231723 1. 0.81719329]
[0.37481703 0.44799204 0.81719329 1. ]]
[0.9083737430941391, 0.7071067811865475]
[0.9083737430941391, 0.6423172335936725]
[0.8171932929538644, 0.7071067811865475]
{}[0.8171932929538644, 0.44799203576793445]
"""
參考:推薦演算法和機器學習系列 - 協同過濾推薦演算法和余弦相似性演算法
Mapreduce 推薦引擎
購買過該商品的顧客還購買過哪些商品 給乙個商品,推薦購買過這個商品的使用者經常購買的五件產品 輸出是鍵值對,鍵是商品,值是5個商品的列表 map1 key userid value userid購買過的產品 map userid,item reduce1 reduce userid,item i1,...
推薦引擎分類介紹
搜尋引擎是當前快速查詢目標資訊的最好途徑。在使用者對自己需求很明確時,用搜尋引擎可以方便地通過關鍵字快速找到自己需要的資訊。但搜尋引擎並不能完全滿足使用者對資訊發現的需求,因為在很多情況下,使用者其實並不明確自己的需要,或者他們的需求很難用簡單的關鍵字來表述,又或者他們需要更加符合他們個人口味和喜好...
基於solr做的推薦引擎思路
轉貼請宣告原文 基於使用者相似推薦簡單設計思路 doc1 user1,user2,user3 doc2 user3 doc3 user2,user3 提交給solr 倒排序索引 user1 doc1 user2 doc1,doc3 user3 doc1,doc2,doc3 先搜尋 user2對應的d...