1.從乙個例子出發
兩名使用者都在某電商**購買了a、b兩種產品。當他們產生購買這個動作的時候,兩名使用者之間的相似度便被計算了出來。其中一名使用者除了購買了產品a和b,還購買了c產品,此時推薦系統會根據兩名使用者之間的相似度會為另一名使用者推薦專案c。
2.應用現狀
推薦系統可以說是無處不在了,比如:電商的猜你喜歡,瀏覽器右側的推送訊息,包括搜尋結果的排序,廣義來說都算推薦系統的一部分。目前推薦系統給亞馬遜帶來了35%的銷售收入,給netflix帶來了高達75%的消費,並且youtube主頁上60%的瀏覽來自推薦服務。
**軟體如spotify及deezer也使用推薦系統進行**推薦。
3.推薦演算法
協同過濾的推薦又可以分為兩類:
啟發式推薦演算法(merhory-based algorithms)
啟發式推薦演算法易於實現,並且推薦結果的可解釋性強。啟發式推薦演算法又可以分為兩類:
基於物品的協同過濾(ltem-based collaborative filtering):主要考慮的是物品和物品之間的相似度,只有找到了目標使用者對某些物品的評分,那麼就可以對相似度高的類似物品進行**,將評分最高的若干個相似物品推薦給使用者。舉個例子,如果使用者a、b、c給書籍x、y的評分都是5分,當使用者d想要買y書籍的時候,系統會為他推薦x書籍,因為基於使用者a、b、c的評分,系統會認為喜歡y書籍的人在很大程度上會喜歡x書籍。
基於模型的推薦演算法(model-based algorithms)
基於模型的推薦演算法利用矩陣分解,有效的緩解了資料稀疏性的問題。矩陣分解是一種降低維度的方法,對特徵進行提取,提高推薦準確度。基於模型的方法包括決策樹、基於規則的模型、貝葉斯方法和潛在因素模型。
推薦框架:tensorflow pytorch
4.推薦系統的目的
幫助使用者快速找到想要的商品,提高使用者對**的忠誠度;
提高**交叉銷售能力、成交轉換率;
5.簡單推薦演算法的設計思路
首先,找到user1喜歡的商品;找出與user1具有相同的商品興趣愛好的人群;找出該人群喜歡的其他商品;將這些商品推送給user1。
難點2:計算相似度
import math
# 計算兩點之間的距離
def euclidist(a,b):
return math.sqrt(sum([(a - b)**2 for (a,b) in zip(a,b)]))
x = [1,2,3,4]
y = [0,1,2,3]
print(euclidist(x,y))
6.基於使用者的協同過濾推薦系統
使用python3.7配合協同過濾演算法構建一套簡單的精準推薦系統。
假設我們是乙個手機銷售的電商平台,有一些使用者的購買資料和打分記錄如下(phone.txt
):
1,諾基亞1100,4.8
1,iphone11,5.0
1,聯想g7,3.0
2,諾基亞1100,3.0
2,vivo,5.0
2,htc,0.2
3,錘子t1,0.1
3,魅族h11,0.3
3,pixel2,4.9
step1:將資料讀取並格式化為字典形式,便於解析
# 讀取資料集
content =
with open('./phone.txt','r+',encoding='utf-8') as fp:
content = fp.readlines()
# 格式化資料列表
data = {}
for line in content:
line = line.strip().replace("\n",'').split(',')
# 資料格式:line = ['1','諾基亞1100','4.8']
if not line[0] in data.keys():
data[line[0]] =
else:
data[line[0]][line[1]] = line[2]
print(data)
"""資料字典
, '2':
, '3':
}"""
step 2:計算兩個使用者之間的相似度,這裡使用歐幾里得距離
# 計算使用者相似度
from math import *
def euclid(user1,user2):
# 取出兩個使用者都購買過的商品
user1_data = data[user1]
user2_data = data[user2]
# 預設距離
distance = 0
# 遍歷找出都購買過的手機
for key in user1_data.keys():
if key in user2_data.keys():
distance += pow(float(user1_data[key])-float(user2_data[key]),2)
if distance == 0:
distance = float('inf')
return 1/(1+sqrt(distance))
step 3:計算當前使用者和其他所有使用者的相似度
# 計算某個使用者和其他使用者相似度比較
def top_simliar(user):
res =
for userid in data.keys():
# 排除當前使用者
if not userid == user:
simliar = euclid(user,userid)
res.sort(key=lambda val:val[1],reverse=true)
return res
# 快速推薦方法
def recommend(user):
# 先取乙個相似度最高的使用者
top_user = top_simliar(user)[0][0]
# 相似度最高的購買記錄
items = data[top_user]
# 推薦列表
recommend_list =
for item in items.keys():
if item not in data[user].keys():
# 排序,多個商品按照評分排序
recommend_list.sort(key=lambda val:val[1],reverse=true)
return recommend_list[:10]
step 5:推薦測試
# 對使用者'1'進行推薦
print(recommend('1'))
# 輸出結果:[('vivo', '5.0'), ('htc', '0.2')]
# 將vivo和htc手機按照評分倒序推薦給了使用者1
個性化推薦系統
基於協同過濾的推薦大體包括 基於專案的協同過濾 item basedcf 基於使用者的協同過濾 user basedcf 基於模型的協同過濾演算法 1 3 基於專案的協同過濾 item basedcf 首先根據不同使用者歷史購買商品的評分資訊計算出各專案之間的相似度,構建各專案之間的相似度矩陣 再找...
個性化推薦技術
如果說過去的十年是搜尋技術大行其道的十年,那麼個性化推薦技術將成為未來十年中最重要的革新之一。目前幾乎所有大型的電子商務系統,如amazon cdnow netflix等,都不同程度地使用了各種形式的推薦系統。而近來以 發現 為核心的 正開始在網際網路上嶄露頭角,比如側重於 推薦的八寶盒,側重於圖書...
個性化推薦漫談
如果說過去的十年是搜尋技術大行其道的十年,那麼個性化推薦技術將成為未來十年中最重要的革新之一。目前幾乎所有大型的電子商務系統,如amazon cdnow netflix等,都不同程度地使用了各種形式的推薦系統。而近來以 發現 為核心的 正開始在網際網路上嶄露頭角,比如側重於 推薦的八 寶盒,側重於圖...