desc | |
關於矩陣分解 |
LSA pLSA LDA 本質都是矩陣分解
1. LSA 的奇異值分解 A = S·Σ·D,分解獲得的是三個矩陣,操做一下,就是
S' = S·Σ
D' = Σ·D
此時 S' · D' 仍舊可以獲得 近似原始矩陣的值
# 或者這裏的 Σ 所有取 Σ' 即 :Σ' = sqrt( Σ )
這樣的話,乘完畢之後還能獲得原始的矩陣 A
這個 trick 將 分解爲三個矩陣 轉換爲 分解爲兩個矩陣
2. pLSA 經過引入 topic A = B·C 兩個矩陣
3. MF 矩陣分解的方法,與 pLSA 的問題相同,可是不是用 EM算法,而是數值解法,去逼近
直接獲得 A = P·Q
4. 而你想要的 是 GloVec 的方法,即 input 矩陣是 一個方陣,是對稱方陣
而後 但願 get 一個 矩陣(list of vector)
這些 vector 兩兩相乘 能夠逼近 原始對稱方陣
其實 這部分的代碼 與 MF 的代碼類似
summary 矩陣分解的方法【觀點】
· EM 算法 的方法
· 數值逼近的方法 cost
· LDA 吉布斯採樣
· SVD 分解
|
矩陣分解的 tool |
libSVD
libMF
libFM
svd feature
均可以作矩陣分解
|
冷啓動的概念: |
1. 冷啓動就是沒有用戶的歷史行爲數據,如何給用戶作推薦遇到問題
新加入用戶或商品由於沒有歷史數據因此很難作推薦
2. 只要是推薦系統都會遇到 這個問題,no matter CF or content based
|
推薦的本質與假設
不要本末倒置
|
推薦的根本是:知足用戶的需求,是挖掘用戶的需求再推,這是核心
如今的幾個假設:(不必定真)
· 類似,買過A,可能還會買與A類似的A',基於此,纔會找類似
· 搭配 是用戶需求的補充
淘寶如今是,看過的就會推
其實這就是:類似法 和 搭配法 方法的PK
通過內部實驗,發現:雖然搭配推薦看似好,可是對於轉化率來講,不如 傳統的類似推薦
因此如今的淘寶仍是 以基於類似的方法爲主
|
搭配推薦的思路 |
1. 基於模型的推薦:learning2rank
使用待搭配item 的特徵向量的融合(拼接,相加,笛卡爾積),而後輸入 排序模型,獲得分值
2. 能夠用是關聯規則,基於規則
|
阿里面試的問題,如今纔有觀點啊 |
· 推薦中類似度的計算方法
· 協同過濾推薦的基本思路
· 機器學習的通常流程
而這三個 你都沒有 回答上來 【觀點】
|
看待RNN 的角度 |
· 二叉樹形狀的 網絡結構
· 各個不一樣的門,其實就是:多個 feature map【觀點】
|
推薦系統與產品 |
1. 增長推薦理由,會很大提升 賣出率
eg:
你的 5 個朋友有4個買了這個書
我知道你最近買了A,建議你買B,這個是A 的補
2. 一個app 着重作這兩個點,推薦系統中的 新穎度(他們不知道的) 和 驚喜度(不類似但滿意) 這兩個 指標
若是這兩個作得好,那麼這個 app 會很快火起來
|
工業上的推薦系統 |
都是 多個 方法的 merge
word2vec
MF
CF
learning2rank
而不是單一的 一個模型的 綜合
由於在意穩定性
|
推薦中的評價指標 |
RMSE 中文是均方根偏差
root mean square error
|
利用word2vec |
1. 使用 用戶的 行爲序列,即 次次點擊的 商品item 序列
而後 對item 進行 word2vec 嘗試,而後將 每一個商品 vector 化
從而 基於第一類假設,能夠有 類似的商品 來進行跑排序,以進行推薦
2. word2vec 自己已經體現了 序列的學習,即 next word
優勢:
解決的問題是 , CF找回不夠,由於:
使用協同過濾的時候 每一個商品id,其實就是 太離散了,因此用 低維度向量表示每一個商品,那麼 至關於降維
|
推薦系統選取的各個feature 的評價 | ![]() ![]() |
與搜索引擎的關係 |
對搜索引擎的 兩個角度的改善
1. QA,不返回頁面,而是具體答案
2. 推薦系統,直接給出猜你想看的
因此 QA,推薦系統,CTR ,都依賴於 搜索引擎的原理
|
提升覆蓋率 |
就是 防止馬太效應
即 越熱越推,越推越熱
|
提升多樣性 |
就是:給用戶更多的選擇
推薦100件襯衫也是隻能買一件
|
對於打分的預處理須要注意: |
每行去均值,再去類似度比較
去均值其實就是 由於有人 偏向高分低分,是爲了消除用戶的【評分尺度】
|
item CF > user CF |
工業界:通常用於 item Collaborative filtering
由於:
1. 用戶量> 商品量:好比 電影一共就幾萬部
2. 穩定度高:即兩本書的類似度持久
兩本書的類似度 今年 和 去年一半同樣
而 user 的類似度會變化
|
商品關聯 |
兩個角度
1. 在電商領域有不少 同款但不徹底同樣的商品,會當成兩個item
因此須要提早 作好關聯
其實就是下降稀疏性,合併類似的
2. 若是 A、B 用戶不能計算類似度,可是 AC 能夠,BC 能夠,那麼就能夠間接獲得 AB 的類似度
|
關於冷啓動問題 的解決 |
1.對於 新用戶
用戶註冊的時候就要提供信息,或者使用互動的方式進行 用戶信息的獲取
社交數據 或者 標籤數據
2. 對於新商品
根據商品的屬性,能夠基於規則 給出與 其它商品的 類似度,而後再基於 item based CF 推薦
|
推薦系統的觀點 |
input 一個 不滿的矩陣
output 缺失的值
由於是矩陣,因此 纔有不少與矩陣相關的操做
|
基於矩陣分解必需要正則化 |
由於要防止過擬合,不然 擬合出來 仍是 0
![]() ![]() |
打分系統若是增長偏置的化,可能效果會好 |
關於矩陣分解,由於有打分體系,因此特別指出:要加上偏置
對於 每個 擬合的值
![]()
多加了 μ總體平均,和 user 與 item 的各自偏置
![]() |
wordvec經驗 | 通常上 300~ 500 維度纔是好的 |
矩陣擬合的代碼 |
#簡單的張量分解進行打分和推薦
#要用到numpy模塊
import numpy
#手寫矩陣分解
#如今有不少很方便對高維矩陣作分解的package,好比libmf, svdfeature等
def matrix_factorization(R, P, Q, K, steps=5000, alpha=0.0002, beta=0.02):
Q = Q.T
for step in xrange(steps):
for i in xrange(len(R)):
for j in xrange(len(R[i])):
if R[i][j] > 0:
eij = R[i][j] - numpy.dot(P[i,:],Q[:,j])
for k in xrange(K):
P[i][k] = P[i][k] + alpha * (2 * eij * Q[k][j] - beta * P[i][k])
Q[k][j] = Q[k][j] + alpha * (2 * eij * P[i][k] - beta * Q[k][j])
eR = numpy.dot(P,Q)
e = 0
for i in xrange(len(R)):
for j in xrange(len(R[i])):
if R[i][j] > 0:
e = e + pow(R[i][j] - numpy.dot(P[i,:],Q[:,j]), 2)
for k in xrange(K):
e = e + (beta/2) * (pow(P[i][k],2) + pow(Q[k][j],2))
if e < 0.001:
break
return P, Q.T
|