推薦系統 | 協同過濾 —— 矩陣降維SVD/SVD++

目錄

1.特徵值分解(EVD)

1.1.實對稱矩陣(也可爲方陣)

 1.2.一般矩陣

2.奇異值分解(SVD)

2.1.奇異值分解定義

2.2.奇異值求解

2.3.數學引例

2.4.圖像壓縮應用(Python)

2.5.協同過濾推薦系統中矩陣分解應用

3.SVD++

3.1. 增加偏執項的SVD

3.2.SVD++


奇異值分解(SVD)在數據降維中應用較多

1.特徵值分解(EVD)

1.1.實對稱矩陣(也可爲方陣)

 1.2.一般矩陣

2.奇異值分解(SVD)

2.1.奇異值分解定義

2.2.奇異值求解

2.3.數學引例

2.4.圖像壓縮應用(Python)

# ! /usr/bin/env python
# coding:utf-8
# python interpreter:3.6.2
# author: admin_maxin
import numpy as np
import cv2
import matplotlib.pyplot as plt


img = cv2.imread("dollar.jpg", cv2.IMREAD_GRAYSCALE)
# 圖像大小351x499x3
print(img.shape)

# SVD
# 從svd函數中得到的奇異值sigma它是從大到小排列的
U, sigma, VT = np.linalg.svd(img)

# 取奇異值重構圖片
range_1 = 6
img_1 = (U[:, 0:range_1]).dot(np.diag(sigma[0:range_1])).dot(VT[0:range_1, :])

range_2 = 120
img_2 = (U[:, 0:range_2]).dot(np.diag(sigma[0:range_2])).dot(VT[0:range_2, :])

fig, ax = plt.subplots(1, 3, figsize=(24, 8))

ax[0].imshow(img)
ax[0].set(title="src")
ax[1].imshow(img_1.astype(np.uint8))
ax[1].set(title="nums of sigma = 6")
ax[2].imshow(img_2.astype(np.uint8))
ax[2].set(title="nums of sigma = 120")
plt.show()

2.5.協同過濾推薦系統中矩陣分解應用

SVD 全程奇異值分解,原本是是線性代數中的一個知識,在推薦算法中用到的 SVD 並非正統的奇異值分解。前面已經知道通過矩陣分解,可以得到用戶矩陣和物品矩陣。針對每個用戶和物品,假設分解後得到的用戶 u 的向量爲 p_u,物品 i 的向量爲 q_i,那麼用戶 u 對物品 i 的評分爲:

 

其中,K 表示隱因子個數。爲給每個用戶和物品生成k維向量,首先需將該問題轉化成機器學習問題,要解決機器學習問題,就需要尋找損失函數以及優化算法。這裏單個用戶對單個物品的真實評分與預測評分之間的差值記爲 e{ui}。

其中,R 表示所有的用戶對所有物品的評分集合,K 表示隱因子個數。我們要做的就是求出用戶向量 p_u 和物品向量 q_i ,來保證損失函數結果最小。求解損失函數優化算法常用的選擇有兩個,一個是梯度下降(GD),另一個是交替最小二乘(ALS) 。這裏以梯度下降爲例。

  1. 準備好用戶物品的評分矩陣,每一條評分數據看做一條訓練樣本;
  2. 給分解後的 P 矩陣和 Q 矩陣隨機初始化元素值;
  3. 用 P 和 Q 計算預測後的分數;
  4. 計算預測的分數和實際的分數誤差;
  5. 沿着損失函數梯度下降的方向更新 P 和 Q 中的元素值;
  6. 重複步驟 3 到 5,直到達到停止條件。

梯度下降算法的一個關鍵點在於計算損失函數對於每個參數的梯度。

 

3.SVD++

3.1. 增加偏執項的SVD

在實際應用中,會存在以下情況:相比於其他用戶,有些用戶給分就是偏高或偏低。相比於其他物品,有些物品就是能得到偏高的評分。所以使用 pu*qi^T 來定義評分是有失偏頗的。我們可以認爲 評分 = 興趣 + 偏見。其中,μ表示全局均值, bu表示用戶偏見,bi表示物品偏見。

而上式中的相關參數同樣也可通過機器學習優化算法的相關方式獲得。

 

3.2.SVD++

實際生產中,用戶評分數據很稀少,也就是說顯式數據比隱式數據少很多,SVD++ 就是在 SVD 模型中融入用戶對物品的隱式行爲。我們可以認爲 評分=顯式興趣 + 隱式興趣 + 偏見。那麼隱式興趣如何加入到模型中呢?首先,隱式興趣對應的向量也是 k 維,它由用戶有過評分的物品生成,因爲,評分的行爲從側面反映了用戶的喜好,可以將這樣的反映通過隱式參數的形式體現在模型中:

 

其中 I(u) 爲該用戶所評價過的所有電影的集合,yj爲隱藏的“評價了電影 j”反映出的個人喜好偏置。收縮因子取集合大小的根號是一個經驗公式,並沒有理論依據。模型參數bi,bu,qi,pu,yj通過最優化下面這個目標函數獲得:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章