als是交替最小二乘法的簡稱,是2023年以來,用的比較多的協同過濾演算法。它已經整合到spark的mllib庫中,使用起來比較方便。
這裡可以想象一下,每個人的性格愛好可以認為是乙個抽象的模型,每個人的模型都有自己的乙個特點。因此,每個人對於商品的評價都有自己的一套規律,als演算法就是可以通過這些已有的評價資料中,盡可能的計算出乙個誤差較小的模型,來**對未評價商品的評分。
als演算法的核心就是假設:打分矩陣是近似低跌的,通過使用者u成行,商品v成列的方式,形成乙個u * v
的打分矩陣a。由於使用者和商品的數量非常多,所以形成的矩陣a也非常龐大,這樣在處理起來比較困難,所以矩陣a可以通過兩個小矩陣的乘積來表示,如下圖所示:
實際情況中k遠小於u和v的值, 一般在50-200之,具體取值是什麼不重要,因為這個只是為了最後計算出誤差最小的模型。這樣一來得到乙個使用者矩陣和商品矩陣。通過兩個矩陣的乘積得到矩陣a。
als的交替二字用的很是精闢,就是指需要先隨機生成乙個矩陣u0,然後求另乙個矩陣v0。然後固定v0,求u1。這樣交替下去,誤差會逐漸變小。另外als不能保證會收斂到全域性最優解。但是在實際情況中,als最後是不是最優解影響並不是很大。因為,本來就沒有最好的推薦,只有更好的推薦。
交替最小二乘法百科
首先需要一批使用者電影評價的資料,資料格式如下:
#使用者id,#電影id,#評分,#時間戳資料用逗號隔開。1,31,2.5,1260759144
1,1029,3.0,1260759179
import breeze.numerics.sqrt
import org.apache.spark.sparkconf
import org.apache.spark.mllib.recommendation.
import org.apache.spark.rdd.rdd
import org.apache.spark.sql.sparksession
object alstrainertest
def adjustalsparam(traindata: rdd[rating]
, testdata: rdd[rating]):
unit
=// 控制台列印輸出最優引數
println(
">>>"
+result.minby(_._3))}
def getrmse(model: matrixfactorizationmodel, data: rdd[rating]):
double
=.mean())
}}
import org.apache.spark.sparkconf
import org.apache.spark.mllib.recommendation.
import org.apache.spark.sql.sparksession
import org.jblas.doublematrix
object alstrainertest2
// 對所有電影兩兩計算它們的相似度,先做笛卡爾積
val movierecs = moviefeatures.cartesian(moviefeatures)
.filter
.map
}.filter(_._2._2 >
0.6)
// 過濾出相似度大於0.6的
.groupbykey(
).map
.todf(
) print(
">>>"
+movierecs.show(10,
false))
spark.close()}
// 求向量余弦相似度
def consinsim(movie1: doublematrix, movie2: doublematrix)
:double
=}
最後會得到一批這樣的資料。每一行第乙個是電影id,後面跟上乙個陣列,陣列中每一項的第乙個是電影id,第二個是相似度。
電影id|[[電影id,相似度]]
1216 |[[268,0.9020642201372278], [100553,0.8698425508833494]]1792 |[[108188,0.900184780661061], [100487,0.8869996818771411]
2688 |[[27808,0.8402992760950369], [122,0.8381670349448246]]
推薦系統 電影推薦系統(一)
二 電影推薦思路總結 資料儲存部分 離線推薦部分 實時推薦部分 系統初始化部分 離線推薦部分 實時推薦部分 業務系統部分 使用者電影特徵提取時,必須要有對應的資料,電影表,使用者表,使用者評價表。通過als演算法對評價表進行計算,計算出電影的特徵矩陣。通過電影特徵的矩陣計算得出每個電影最相似的幾個電...
基於Spark的電影推薦系統(推薦系統 1)
行業背景 快速 apache spark以記憶體計算為核心 通用 一站式解決各個問題,adhoc sql查詢,流計算,資料探勘,圖計算 完整的生態圈 只要掌握spark,就能夠為大多數的企業的大資料應用場景提供明顯的加速 猜你喜歡 為代表的推薦系統,從吃穿住行等專案背景介紹 本專案是乙個基於apac...
電影推薦系統的建模
11336241 葉均明 一 概述 由movielens評分資料集作為訓練集 含943名使用者對1682部電影的評分 根據使用者資訊和過往打分進行電影推薦,即允許使用者對自己所看過的電影進行打分,並且根據使用者歷史的打分資訊,為使用者 他對其他未 的電影的打分,或 他對其他電影的評分分類,將 分值高...