為何要根據(jù)損失函數(shù)推導公式以及關(guān)于推導的方式
目錄:
- 原因:解釋了為何要推導這些公式的原因
- 舉例說明:根據(jù)文章來說明這個推導的必要性
- 分析如何推導添加用戶相似度的公式
1. 原因
首先來先說一下原因鄙陡,接著舉例分析這個原因感帅,最后再來分析一下到底要如何推導加了用戶相似度的兩個矩陣的計算方式。
那么先說原因:
- ALS 模型不是輸入一條損失函數(shù)的公式隘冲,然后輸入數(shù)據(jù)就能直接跑起來模型的。
- 模型的更新是要根據(jù)損失函數(shù)推導出來的公式來設(shè)定的穆壕。
- 眾所周知盲厌,ALS 是一個交替最小二乘法燎孟,意思是先固定用戶矩陣或者項目矩陣中的其中 1 個,然后計算另一個矩陣的镜盯,最終得到兩個最優(yōu)解矩陣岸裙。而如何計算另一個矩陣辦法或者公式我們是未知的。
- 因此速缆,我們要根據(jù)損失函數(shù)來推導出這兩個矩陣(用戶矩陣和項目矩陣)的是怎么在固定一個矩陣的情況下來計算更新另一個矩陣的降允。
- 總結(jié),以上就是我們需要從損失函數(shù)推導公式的原因艺糜。
那么接下來就按照知乎文章中的損失函數(shù)推導公式過程以及代碼來舉例說明整個過程
2. 舉例說明
接下來就舉例說明一下文章中的 ALS 算法的推導過程剧董,以及解說一下配套代碼的含義
2.1 文章中的 ALS 損失函數(shù)
首先是損失函數(shù),下面是知乎文章中的 ALS 模型的損失函數(shù):
這個是損失函數(shù)破停。
2.2 推導的過程
由于 ALS 算法的流程是先固定 1 個矩陣翅楼,然后求另一個矩陣的。然而現(xiàn)在不知道是如何計算另一個矩陣的真慢,也就是不知道另一個矩陣的計算公式毅臊。因此我們需要來推導這個另一個矩陣的計算公式。
由損失函數(shù)推導出用戶矩陣 和項目矩陣
的計算公式黑界,那么推導的過程主要分 3 步:
- 對損失函數(shù)求
的一階偏導數(shù)管嬉,得到結(jié)果如下:
- 然后再令一階偏導數(shù)等于0 ,即等式左邊項為 0 朗鸠,得到了用戶矩陣
蚯撩,結(jié)果如下:
- 同理,可證得項目矩陣
的計算公式
2.3 推導的公式在代碼上的應(yīng)用
下面截取了 ALS 算法的代碼中核心部分
- 含義
- 這段代碼的內(nèi)容是按照上面推導出來的、用來計算兩個矩陣 U 和 I 的公式設(shè)計出來的扰楼。
- 作用
- 輸入數(shù)據(jù)后通過調(diào)用該方法呀癣,最終計算得到 U 和 I 的兩個矩陣。
for i in range(max_iter):
if i % 2:
# U = (I * I_transpose) ^ (-1) * I * R_transpose
items = self.item_matrix
self.user_matrix = self._items_mul_ratings(
items.mat_mul(items.transpose).inverse.mat_mul(items),
ratings
)
else:
# I = (U * U_transpose) ^ (-1) * U * R
users = self.user_matrix
self.item_matrix = self._users_mul_ratings(
users.mat_mul(users.transpose).inverse.mat_mul(users),
ratings_T
)
3. 如何處理加了相似度的損失函數(shù)
3.1 加了相似度的損失函數(shù)
首先需要先了解加了用戶相似度的損失函數(shù)是怎樣的弦赖。
加了相似度的損失函數(shù)如下项栏,這是在論文中截取到的:
這個損失函數(shù)的參數(shù)解釋如下:
- 其中
是正則化參數(shù),
表示用戶
與用戶
之間的相似度蹬竖,
表示用戶的外向好友沼沈,即相似度較高朋友
3.2 推導步驟
- 對損失函數(shù)求
的一階偏導數(shù)
- 然后再令一階偏導數(shù)等于0 流酬,即等式左邊項為 0 ,得到了用戶矩陣
- 然后就可以同理可得項目矩陣
了
我主要是在這里卡主了列另,不會推導這些公式
3.3 推導過程參考文章
推導過程參考文章:
文章從下圖開始詳細介紹了 ALS 算法的推導過程