向量空間:如何實現一個簡單的音樂推薦系統?
不僅可以選歌聽,還可以根據你的聽歌的口味偏好,推薦你可能喜歡的歌曲
算法解析
- 找到跟你口味偏好類似的用戶,把他們愛聽的歌曲推薦給你
- 找出跟你喜愛的歌曲特徵相似的歌曲,把這些歌曲推薦給你
1.基於相似用戶做推薦
把聽類似歌曲的人看做口味相似的用戶,跟誰共同喜愛的歌曲多,就說跟誰口味相似。只需要遍歷所有用戶,對比每個用戶跟你共同喜愛的歌曲個數,並設置一個閾值,如果你和某個用戶共同喜愛的歌曲個數超過這個閾值,把這個用戶喜愛但你沒聽過的歌曲推薦給你
如何定義用戶對某首歌曲的喜愛程度?
通過用戶的行爲來定義喜愛程度,給每個行爲定義一個得分,得分越高表示喜愛程度越高
單曲循環 | 分享 | 收藏 | 搜索 | 聽完 | 沒聽過 | 跳過 |
---|---|---|---|---|---|---|
5 | 4 | 3 | 2 | 1 | 0 | -1 |
有了用戶對歌曲喜愛程度的對應表之後如何判斷兩個用戶是否口味相似呢?
對於兩個用戶之間的相似度可以使用另外一個距離,就是歐幾里得距離,歐幾里得距離就是用來計算兩個向量之間距離的。
向量和距離:
一維是一條線,用1,2,3等單個數表示一維空間的某個位置;二維是一個面,用(1,3)等表示二維空間某個位置;三維空間是個立體空間,用(1,3,5)等表示,K維空間的某個位置可以用(x1,x2,…,xk)表示,這種表示方法就是向量,怎麼計算兩個向量之間的距離呢?
把每個用戶對所有歌曲的喜愛程度用一個向量表示,計算出兩個向量之間的歐幾里得距離,作爲兩個用戶的口味相似程度的度量,如果小明與你的歐幾里得距離最小,說明跟你的口味最相似
你:(5,3……)
小明:(4,5……)
小王:(1,0……)
小紅:(3,0……)
小白:(0,0……)
你與小明、小王、小紅、小白的歐幾里得距離分別是:
、 、 、 所以跟小明口味最相似
2 基於相似歌曲做推薦
如果這是一個新用戶,沒有收集到足夠多的行爲數據,可以基於相似歌曲推薦,如果某歌曲跟你喜愛的歌曲相似,就把它推薦給你
如何量化兩個歌曲之間的相似程度?
兩首歌,如果喜歡聽的人羣都是差不多的,側面反映出兩首歌比較相似,使用基於用戶中的標準來定義喜愛程度,每個用戶對歌曲有不同的喜愛程度,來定義喜愛程度,基於相似用戶的推薦方法中,針對每個用戶,將對各個歌曲的喜愛程度作爲向量,基於相似歌曲的推薦思路中,針對每個歌曲,將每個用戶的打分作爲向量,有了每個歌曲的向量表示,通過計算向量之間的歐幾里得距離,距離越小,表示兩個歌曲越相似,就在用戶已經聽過的歌曲中找出他喜愛程度較高的歌曲,在找出與這些歌曲很相似的其他歌曲推薦
總結引申
是推薦系統中最典型的問題