【算法無用系列】通過余弦相似度計算電影、用戶相似度
????話不多說,本文通過電影推薦系統中,基于余弦相似度算法計算出用戶相似和電影相似原理。希望可以幫助一些代碼不懂的同學一些思路。
記錄用戶電影評分數據
????一般情況來說,會根據用戶的行為,記錄當前用戶對于某個電影的評分,簡單的計算公式為
- 瀏覽 +1
- 點贊 +2
- 評論 +3
- 收藏 +5
????等等,當然這個累加的評分可以自行在代碼中配置。最后我們會得出這樣的一個用戶電影評分關系表,如下所示,記錄了用戶和電影的評分。
用戶ID | 電影ID | 評分 |
---|---|---|
1 | 101 | 5.0 |
1 | 102 | 3.0 |
1 | 103 | 2.5 |
2 | 101 | 2.0 |
2 | 102 | 2.5 |
2 | 103 | 5.0 |
2 | 104 | 2.0 |
3 | 101 | 5.0 |
3 | 104 | 4.0 |
3 | 105 | 4.5 |
4 | 101 | 4.0 |
4 | 103 | 3.0 |
4 | 104 | 2.0 |
4 | 105 | 4.0 |
5 | 102 | 4.0 |
5 | 103 | 4.0 |
5 | 104 | 1.0 |
轉換矩陣
電影ID 101 102 103 104 105
用戶ID
1 5.0 3.0 2.5 0.0 0.0
2 2.0 2.5 5.0 2.0 0.0
3 5.0 0.0 0.0 4.0 4.5
4 4.0 0.0 3.0 2.0 4.0
5 0.0 4.0 4.0 1.0 0.0
????對于二維表的數據轉換為這樣的一個矩陣。那么如何判斷兩個用戶的相似程度如何呢?
????橫著看這幾個電影的評分,如果這些分數都特別相似,那就可以證明兩個用戶的興趣愛好類似,越相似,那么相似度越高。
????豎著看也是一樣,如果兩列數值越相似,那么就可以認為兩個電影越相似(當前這僅僅是測試,在真實的場景中,這樣的單一維度來計算電影相似度是不夠的)。
????或者這樣的一個多維度矩陣無法和我們在高中學到的二維坐標系XY軸綁定起來。那么我可以把維度減少一下。如下,變成了高中時常見的XY軸二維坐標。
電影ID 101 102
用戶ID
1 5.0 3.0
2 2.0 2.5
????如上圖所示,形成兩個向量,兩個向量的夾角越小,則證明兩個 越相似。
????當前,以上數據只是為了更好理解計算公式,真實情況下,維度會更多,如下就是一個5個維度,不過我們可以繼續套用公式。
電影ID 101 102 103 104 105
用戶ID
1 5.0 3.0 2.5 0.0 0.0
2 2.0 2.5 5.0 2.0 0.0
3 5.0 0.0 0.0 4.0 4.5
4 4.0 0.0 3.0 2.0 4.0
5 0.0 4.0 4.0 1.0 0.0