推薦引擎 基於余弦相似度書籍推薦Python實現

2021-09-11 02:12:23 字數 2193 閱讀 8893

# -*- 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...