矩陣的奇異值分解 svd
(特別詳細的總結,參考
1)低秩近似
2)特徵降維
相似度和距離度量
(參考
)在機器學習中,als
指使用交替最小二乘求解的乙個協同推薦演算法。
每一行代表乙個使用者(u1,u2,…,u8),
每一列代表乙個商品(v1,v2,…,v8),
使用者的打分為1-9
分。
這個矩陣只顯示了觀察到的打分,我們需要推測沒有觀察到的打分。
換句話說,就是乙個m*n
的打分矩陣可以由分解的兩個小矩陣u(m*k)
和v(k*n)
的乘積來近似,即 a=uvt,k<=m,n。這就是als
的矩陣分解方法。
這樣我們把系統的自由度從o(mn)
降到了o((m+n)k)
。
這個低維空間要能夠很好的區分事物,那麼就需要乙個明確的可量化目標,這就是重構誤差。
在als
中我們使用f範數來量化重構誤差,就是每個元素重構誤差的平方和。這裡存在乙個問題,我們只觀察到部分打分,a
中的大量未知元是我們想推斷的,所以這個重構誤差是包含未知數的。
解決方案很簡單:只計算已知打分的重構誤差。
協同過濾分析使用者以及使用者相關的產品的相關性,用以識別新的使用者-產品相關性。
協同過濾系統需要的唯一資訊是使用者過去的行為資訊,比如對產品的評價資訊。
通過內積rij = ui
t vj 來**,另外加入正則化引數 lamda 來預防過擬合。
最小化重構誤差:
偏好:二元變數 ,它表示使用者u
對商品v
的偏好
信任度:變數 ,它衡量了我們觀察到的信任度
最小化損失函式:
1)顯示和隱式的異同:
2) 交替最小二乘求解:
即固定ui求vi+1再固定vi+1求ui+1
import
org.apache.spark.mllib.recommendation.
_<
br
>
//處理訓練資料
val
data
=
sc.textfile(
"data/mllib/als/test.data"
)
val
ratings
=
data.map(
_
.split(
','
)
match
)
// 使用als訓練推薦模型
val
rank
=
10
val
numiterations
=
10
val
model
=
als.train(ratings, rank, numiterations,
0.01
)
Spark MLlib交替最小二乘法ALS原始碼解析
請先閱讀leboop發布的博文 spark mllib協同過濾之交替最小二乘法als原理與實踐 核心 如下 定義als,引數初始化 val als new als setrank 50 setmaxiter 10 setregparam 0.01 setusercol userid setitemc...
可交替的最小二乘法(ALS WR)
為什麼要在推薦系統中用隱式因子分解 隱語義模型?因為在實際專案中,我們的使用者很多專案都是沒有評分的,並且很多情況下評分值都是缺失的。或者很稀疏。那麼我們分解為使用者因子矩陣和專案因子矩陣,然後在低維空間進行計算,這樣的話資料會更加稠密。然後反過來我們來 缺失值,這就是目的。在這裡為什麼不用隨機梯度...
最小二乘法
include stdafx.h include include const int n 2 const int m 5 int sgn double x void lss double g n 1 int xm,int xn,double x m double p,double w m lss函式...