//載入需要的包import org.apache.spark.rdd._
import org.apache.spark.mllib.recommendation.
//讀取資料
//資料情況探索(評分數,使用者數,物品數)val numratings = ratings.count()//某個人評分資料val numusers = ratings.map(_._2.user).distinct().count()
val nummovies = ratings.map(_._2.product).distinct().count()
println("got " + numratings + " ratings from " + numusers + " users on " + nummovies + " movies.")
//拆分訓練集,校驗集,測試集(ratings是(int,rating)格式,取values即可)
val numpartitions = 4val training = ratings.filter(x => x._1 < 6)
.values
.union(myratingsrdd) //加入個人評分資料
.repartition(numpartitions)
.cache()
val validation = ratings.filter(x => x._1 >= 6 && x._1 < 8)
.values
.repartition(numpartitions)
.cache()
val test = ratings.filter(x => x._1 >= 8).values.cache()
val numtraining = training.count()
val numvalidation = validation.count()
val numtest = test.count()
println("training: " + numtraining + ", validation: " + numvalidation + ", test: " + numtest)
// 校驗集**資料和實際資料之間的均方根誤差def computermse(model: matrixfactorizationmodel, data: rdd[rating], n: long): double =
//訓練不同引數下的模型,並在校驗集中驗證,獲取最佳引數下的模型val ranks = list(8, 12)
val lambdas = list(0.1, 10.0)
val numiters = list(10, 20)
var bestmodel: option[matrixfactorizationmodel] = none
var bestvalidationrmse = double.maxvalue
var bestrank = 0
var bestlambda = -1.0
var bestnumiter = -1
for (rank
}
//用最佳模型作用於測試集,並計算**評分和實際評分之間的均方根誤差//比較將最佳模型作用於測試集的結果:testrmse 與 僅僅用均值**的結果進行比較,計算模型提公升度。val meanrating = training.union(validation).map(_.rating).mean
val baselinermse = math.sqrt(test.map(x => (meanrating - x.rating) * (meanrating - x.rating)).mean)
val improvement = (baselinermse - testrmse) / baselinermse * 100
println("the best model improves the baseline by " + "%1.2f".format(improvement) + "%.")
//裝載電影目錄對照表(電影id->電影標題)// 推薦前十部最感興趣的電影,注意要剔除使用者已經評分的電影//列印結果
協同過濾 基於使用者的協同過濾itemCF
基於使用者的協同過濾演算法也被稱為最近鄰協同過濾或knn k nearest neighbor,k最近鄰演算法 其核心思想就是,首先根據相似度計算出目標使用者的鄰居集合,然後用鄰居使用者評分的加權組合來為目標使用者作推薦。通常這些演算法都可以總結成三步 首先,使用使用者已有的評分來計算使用者之間的相...
基於使用者協同過濾與基於專案協同過濾的適用場景
一 在適合用途上的比較 基於使用者的協同過濾演算法主要有兩步 1 找到和目標使用者興趣相似的使用者集合 2 找到這個集合中的使用者喜歡的,且目標使用者沒有聽說過的物品推薦給目標使用者。基於物品的協同過濾演算法主要有兩步 1 計算物品之間的相似度。2 根據物品的相似度和使用者的歷史行為給使用者生成推薦...
基於使用者協同過濾與基於專案協同過濾的適用場景
一 在適合用途上的比較 基於使用者的協同過濾演算法主要有兩步 1 找到和目標使用者興趣相似的使用者集合 2 找到這個集合中的使用者喜歡的,且目標使用者沒有聽說過的物品推薦給目標使用者。基於物品的協同過濾演算法主要有兩步 1 計算物品之間的相似度。2 根據物品的相似度和使用者的歷史行為給使用者生成推薦...