一 协同过滤算法
协同过滤(Collaborative filtering)算法是一种基于群体用户或者物品的典型推荐算法,主要有两种:一种是通过考察具有相同爱好的用户对相同物品的评分标准进行计算。一种是考察具有相同特质的物品从而推荐给选择了某件物品的用户。
协同过滤算法关键是计算相似度,主要有以下几种方法:
1、 基于欧几里得距离计算
公式:
主要从不同目标的绝对差异性考虑
2、 基于余弦角度计算
公式:
主要从方向趋势上考虑
3、 交替最小二乘法(ALS)
Val ratings = data.map(_.split(‘ ’)match{
case Array(user,item,rate) => Rating(user.toInt,item.toInt,rate.toDouble)})
val model = ALS.train(ratings,rank,numIterations,0.01)
var rs = model.recommendProducts(2,1)
rs.foreach(println)
二 线性回归
val parsedData = sc.textFile().map{line => val parts = line.split(‘,’)
LabeledPoint(parts(0).toDouble,
Vectors.dense(parts(1).split(‘,’).map(_.toDouble)))}.cache()
val model = LinearRegressionWithSGD.train(parsedData,100,0.1)
val result = model.predict(Vectors.dense(2))
三 逻辑回归
1、一元逻辑回归
val model = LogisticRegressionWithSGD.train(parsedData,50)
val target = Vectors.dense(-1)
val result = model.predict(target)
2、支持向量机
val model = SVMWithSGD.train(parsedData,50)
3、朴素贝叶斯
val model = NaiveBayes.train(data,1.0)
val predictionAndLable = testData.map(p => (model.predict(p.features),p.label))
val accuracy = 1.0 * predictionAndLable.filter(label => label._1 == label._2).count()
(待续)