推薦系統 電影推薦系統(二)

2021-10-18 08:39:07 字數 2397 閱讀 2121

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部電影的評分 根據使用者資訊和過往打分進行電影推薦,即允許使用者對自己所看過的電影進行打分,並且根據使用者歷史的打分資訊,為使用者 他對其他未 的電影的打分,或 他對其他電影的評分分類,將 分值高...