ALS(alternating least squares)交替最小二乘
ALS演算法是2008年以來,用的比較多的協同過濾演算法。它已經整合到Spark的Mllib庫中,使用起來比較方便。
1 矩陣分解
使用者對物品的打分行為可以表示成一個評分矩陣A(m*n),表示m個使用者對n各物品的打分情況。如下圖所示。
u\v | v1 | v2 | v3 | … |
---|---|---|---|---|
u1 | 5 | 4 | 3 | … |
u2 | ? | 5 | ? | … |
u3 | 4 | ? | 2 | … |
… | … | … | … |
其中,
u\F | f1 | f2 | f3 |
---|---|---|---|
u1 | ? | ? | ? |
u2 | ? | ? | ? |
u3 | ? | ? | ? |
… | … | … | … |
u\F | f1 | f2 | f3 |
---|---|---|---|
v1 | ? | ? | ? |
v2 | ? | ? | ? |
v3 | ? | ? | ? |
v4 | ? | ? | ? |
v5 | ? | ? | ? |
… | … | … | … |
2 交替最小二乘(ALS)
演算法的思想就是:對目標函式,先隨機生成然後固定它求解,再固定求解,這樣交替進行下去,直到取得最優解min(C)。因為每步迭代都會降低誤差,並且誤差是有下界的,所以 ALS 一定會收斂。但由於問題是非凸的,ALS 並不保證會收斂到全域性最優解。但在實際應用中,ALS 對初始點不是很敏感,是否全域性最優解造成的影響並不大。
我們使用使用者喜好特徵矩陣U(m∗k)中的第i個使用者的特徵向量
有了損失函式之後,下面就開始介紹優化方法。通常的優化方法分為兩種:交叉最小二乘法(alternative least squares)和隨機梯度下降法(stochastic gradient descent)。Spark使用的是交叉最小二乘法(ALS)來最優化損失函式。
演算法執行步驟:
• 先隨機生成一個。一般取全域性均值。
• 固定,即認為是已知的常量,來求解:
由於上式中只有
固定j,j∈(1,2,…,n),則:等式兩邊關於為
令上式等於0,得: