協同過濾I2I的簡單實現

2021-09-13 20:16:51 字數 1209 閱讀 7158

基於物品的協同過濾是目前業界應用最多的演算法。

可以通過下面公式定義物品的相似度:

w i,

j=∣n

(i)∩

n(j)

∣∣n(

i)∣∣

n(j)

∣w_=\frac}

wi,j​=

∣n(i

)∣∣n

(j)∣

​∣n(

i)∩n

(j)∣

​這裡,分母∣n(

i)∩n

(j)∣

|n(i) \cap n(j)|

∣n(i)∩

n(j)

∣是同時喜歡物品i和物品j的的使用者數。為了減輕熱門物品的影響,除以∣n(

i)∣∣

n(j)

∣\sqrt

∣n(i)∣

∣n(j

)∣​,懲罰了被很多使用者喜歡的熱門商品。

x

x和yy

y的笛卡爾積(cartesian product),又稱直積,表示為x×y

x×yx×

y,第乙個物件是x

xx的成員而第二個物件是y

yy的所有可能有序對的其中乙個成員。

假設集合a=,集合b=,則兩個集合的笛卡爾積為。

笛卡爾乘積在sql中通過join來實現。

是衡量兩個集合相似度的演算法,用兩個集合的交集元素的個數佔並集元素個數的比例來表示。

j (x

,y)=

∣x∩y

∣∣x∪

y∣

j(x,y)=\frac

j(x,y)

=∣x∪

y∣∣x

∩y∣​

集合可以用布林向量表示,所以當向量為布林值時,計算向量相似度可以使用jaccard距離。

大概在3年前我有一段時間一直在思考頻繁項集挖掘和cf的本質區別是什麼,包括還在乙個會上問過周濤,他當時給我的說法是頻繁項集挖掘演算法複雜度太高了,一般實際中很少應用,效果可能會稍好。現在讓我來看沒有本質區別,因為本質都是挖掘item的co-occurence,包括各種proximity的計算方式,全集的二跳節點是相同的(而二跳節點有幾萬個),不同的是top-k。swing和其他傳統方法最大的區別就是除了co-occurence,它考慮了網路本身的外延結構。頻繁項集挖掘除了apriori,還有pfp-growth,但是計算量仍然龐大,資料集小可以嘗試。

協同過濾的簡單實現

資料集 u mr 轉換為 m ur 歐幾里得距離 皮爾遜相關係數 其他還有jaccard係數,曼哈頓距離演算法 輸入 兩個暫時用字典表示的 輸出 相關係數 m mp 書上用的是歐幾里得距離算電影之間的相關性 對user進行推薦 獲取u mr user 獲取m mp movie movie不在u mr...

簡單的python協同過濾程式

博主是自然語言處理方向的,不是推薦系統領域的,這個程式完全是為了應付大資料分析與計算的課程作業所寫的乙個小程式,先上程式,一共55行。不在意細節的話,55行的程式已經表現出了協同過濾的特性了。就是對每乙個使用者找4個最接近的使用者,然後進行推薦,在選擇推薦的時候是直接做的在4個使用者中選擇該使用者i...

Python實現基於使用者的協同過濾推薦

協同過濾推薦系統在我們的日常生活之中無處不在,例如,在電子 購物,系統會根據使用者的記錄或者其他的資訊來推薦相應的產品給客戶,是一種智慧型的生活方式。之所以叫協同過濾,是因為在實現過濾推薦的時候是根據其他人的行為來做 的,基於相似使用者的喜好來實現使用者的喜好 舉例,如何協同過濾,來對使用者a進行電...