簡易推薦演算法

2021-10-06 07:46:13 字數 4679 閱讀 3007

​ 推薦演算法是計算機專業中的一種演算法,通過一些數學演算法,推測出使用者可能喜歡的東西,目前應用推薦演算法比較好的地方主要是網路,其中**做的比較好。

發展背景:

​ 推薦演算法的研究起源於20世紀90年代,由美國明尼蘇達大學 grouplens研究小組最先開始研究,他們想要製作乙個名為 movielens的電影推薦系統,從而實現對使用者進行電影的個性化推薦。首先研究小組讓使用者對自己看過的電影進行評分,然後小組對使用者評價的結果進行分析,並**出使用者對並未看過的電影的興趣度,從而向他們推薦從未看過並可能感興趣的電影。此後, amazon開始在**上使用推薦系統,在實際中對使用者的瀏覽購買行為進行分析,嘗試對曾經瀏覽或購買商品的使用者進行個性化推薦。根據 enture beat的統計,這一舉措將該**的銷售額提高了35%自此之後,個性化推薦的應用越來越廣泛。

基於內容:專案或物件是通過相關特徵的屬性來定義的,系統基於使用者評價物件的特徵、學習使用者的興趣,考察使用者資料與待**專案的匹配程度。使用者的資料模型取決於所用的學習方法,常用的有決策樹、神經網路和基於向量的表示方法等。基於內容的使用者資料需要有使用者的歷史資料,使用者資料模型可能隨著使用者的偏好改變而發生變化。

基於協同:基於協同過濾的推薦演算法( collaborative filtering recommendation)技術是推薦系統中應用最早和最為成功的技術之一。它一般採用最近鄰技術,利用使用者的歷史喜好資訊計算使用者之間的距離,然後利用目標使用者的最近鄰居使用者對商品評價的加權評價值來**目標使用者對特定商品的喜好程度,從而根據這一喜好程度來對目標使用者進行推薦。

基於關聯規則:以關聯規則為基礎,把已購商品作為規則頭,規則體為推薦物件。關聯規則就是在乙個交易資料庫中統計購買了商品集x的交易中有多大比例的交易同時購買了商品集y,其直觀的意義就是使用者在購買某些商品的時候有多大傾向去購買另外一些商品。比如購買牛奶的同時很多人會購買麵包。

基於效用:基於效用的推薦(utility-based recommendation)是建立在對使用者使用專案的效用情況上計算的,其核心問題是怎樣為每乙個使用者去建立乙個效用函式,因此,使用者資料模型很大程度上是由系統所採用的效用函式決定的。

基於知識:基於知識的方法因它們所用的功能知識不同而有明顯區別。效用知識( functionalknowledge)是一種關於乙個專案如何滿足某一特定使用者的知識,因此能解釋需要和推薦的關係,所以使用者資料可以是任何能支援推理的知識結構,它可以是使用者已經規範化的查詢,也可以是乙個更詳細的使用者需要的表示。

組合推薦:由於各種推薦方法都有優缺點,所以在實際中,組合推薦( hybrid recommendation)經常被採用。研究和應用最多的是內容推薦和協同過濾推薦的組合。

推薦方法

優點缺點

基於內容推薦

推薦結果直觀,容易解釋;不需要領域知識

新使用者問題;複雜屬性不好處理;要有足夠資料構造分類器

協同過濾推薦

新異興趣發現、不需要領域知識;隨著時間推移效能提高;推薦個性化、自動化程度高;能處理複雜的非結構化物件

稀疏問題;可擴充套件性問題;新使用者問題;質量取決於歷史資料集;系統開始時推薦質量差;

基於規則推薦

能發現新興趣點;不要領域知識

規則抽取難、耗時;產品名同義性問題;個性化程度低;

基於效用推薦

無冷開始和稀疏問題;對使用者偏好變化敏感;能考慮非產品特性

使用者必須輸入效用函式;推薦是靜態的,靈活性差;屬性重疊問題;

基於知識推薦

能把使用者需求對映到產品上;能考慮非產品屬性

知識難獲得;推薦是靜態的

協同過濾推薦:

1.啟發式推薦演算法(memory-based algorithms)

基於物品的協同過濾(item-based collaborative filtering):主要考慮的是物品和物品之間的相似度,只有找到了目標使用者對某些物品的評分,那麼就可以對相似度高的類似物品進行**,將評分最高的若干個相似物品推薦給使用者。舉個例子,如果使用者a、b、c給書籍x,y的評分都是5分,當使用者d想要買y書籍的時候,系統會為他推薦x書籍,因為基於使用者a、b、c的評分,系統會認為喜歡y書籍的人在很大程度上會喜歡x書籍。

2.基於模型的推薦演算法(model-based algorithms)

基於模型的推薦演算法利用矩陣分解,有效的緩解了資料稀疏性的問題。矩陣分解是一種降低維度的方法,對特徵進行提取,提高推薦準確度。基於模型的方法包括決策樹、基於規則的模型、貝葉斯方法和潛在因素模型。

推薦框架:tensorflow,pytorch

1.幫助使用者快速找到想要的商品,提高使用者對**的忠誠度;

2.提高**交叉銷售能力、成交轉化率;

流程首先,找到user1 喜歡的商品;

找出與user1具有相同的商品興趣愛好的人群;

找出該人群喜歡的其他商品;

將這些商品推送給user1。

例子兩名使用者都在某電商**購買了a、b兩種產品。當他們產生購買這個動作的時候,兩名使用者之間的相似度便被計算了出來。其中一名使用者除了購買了產品a和b,還購買了c產品,此時推薦系統會根據兩名使用者之間的相似度會為另一名使用者推薦專案c。

難點1:如何獲取興趣相似的使用者

思路:通過購買過相同商品為介質,關聯使用者的關係

難點2:計算相似度

歐氏距離計算(計算兩個點之間的直線距離)

∣ x∣

=(x1

2+x2

2+…+

xn2)

|x| = \sqrt

∣x∣=(x

12​+

x22​

+…+x

n2​)

import math

# 計算兩點之間的距離

defeuclidist

(a,b)

:return math.sqrt(

sum(

[(a - b)**2

for(a,b)

inzip

(a,b)])

)x =[1

,2,3

,4]y =[0

,1,2

,3]print

(euclidist(x,y)

)

根據使用者的購買/收藏關係推薦商品

data =

,"2":,

"3":

,"4":,

"5":,}

#| x | = √(x[1]2 + x[2]2 + … + x[n]2)

from math import

*#pow返回 xy(x的y次方) 的值

#sqrt返回數字x的平方根

#計算使用者之間的相似度

defeuclid

(user1,user2)

:#根據key獲取value

user1_data = data[user1]

user2_data = data[user2]

distance =

0for key in user1_data.keys():

if key in user2_data.keys():

distance +=

pow(

float

(user1_data[key])-

float

(user2_data[key]),

2)#變成小數便於比較,值越小相似度越高

return1/

(1+sqrt(distance)

)print

(euclid(

"1",

"2")

)#構建最相似的使用者top_people

deftop_user

(user)

: res =

for uid in data.keys():

ifnot uid == user:

simliar = euclid(user,uid)

(uid,simliar)

) res.sort(key=

lambda val:val[1]

)return res

print

(top_user(

'1')

)#構建推薦商品

defrecommend

(user)

: top_people = top_user(user)[0

][0]

#獲取當前相似度最高的使用者的商品列表

items = data[top_people]

recommed_list =

for item in items.keys():

#當這個商品不存在於目標使用者的商品列表中,新增到推薦列表中

if item not

in data[user]

.keys():

(item,items[item]))

#根據推薦列表裡的打分請款從小到大排序,然後反轉

recommed_list.sort(key=

lambda val:val[1]

,reverse=

true

)#取出top10推薦

return recommed_list[:10

]print

(recommend(

"1")

)

C 11 14 簡易推薦小記

之前了解過一些c 新標準的內容,覺得很不錯,在此寫篇小記,簡易推薦一下 容器內元素操作是個很普通的需求,工作中應是屢見不鮮,這裡假設有個list 容器,儲存的是一系列 intc 表達一下,大概是這個樣子 ifndef test 1 h define test 1 h include include ...

推薦演算法之好友推薦

寫點自己的理解,大牛請直接略過。好友推薦裡有推薦一些你可能認識的人,其中二度人脈是其中一種。比如 何炅和謝娜 在微博上相互關注,那用二度人脈的方法就是找和謝娜相互關注的人 如 張杰,海濤,某人 這時候 張杰,海濤,某人 就是何炅的二度人脈,排除掉何炅已經相互關注的張杰,剩下 張杰和某人 於是何炅發現...

輕型簡易的Linux桌面環境推薦

linux強大的適用性和創新性 開放性在桌面環境方面得到了很好的體現。比較流行的桌面環境有gnome,kde,enlightenment,xfce,lxde等。現在gnome和kde成為大多數linux發行版本預設的桌面環境。但是,與gnome kde比較,後面提到的桌面環境如enlightenme...