协同过滤算法+相似度度量+交替最小二乘法

一.协同过滤算法(Collaborative Filtering)

1.简介

协同过滤算法:是一种基于群体用户或者物品的经典推荐算法。分两种:

        (1).通过考察具有相同爱好的用户对相同物品的评分标准进行计算。

        (2).考察具有相同特质的物品从而推荐给选择了某件物品的用户。

A和B是“志同道合”的基友(相似度很高),将A喜欢的物品推荐给B是合理的

      

在无先验知识的前提下,根据A所喜欢物品的相似性,将相似物品推荐给A,是合理的

2.问题

基于用户,数据量大,对于通用物品往往优先推荐,对于热点物品不够准

基于物品,数据量相对小,而推荐同类物品存在用户已持有不再需要的问题

二.相似度度量

1.基于欧几里得距离的相似度计算

(1)欧几里得距离(Euclidean distance):表示三维空间中两个点的真实距离。是一种基于用户之间直线距离的计算方式。

不同的物品或用户对应不同的坐标,特定目标定位为坐标原点。

欧几里得距离公式:


相似度:1/(d+1)

2.基于余弦角度的相似度计算

特定目标作为坐标上的点,但不是原点。夹角的大小来反映目标之间的相似度。

3.欧几里得相似度与余弦相似度的比较

distance and similarity

欧几里得相似度注重目标之间的差异。

余弦相似度更多是对目标从方向趋势上区分。

4.余弦相似度实战

/**
  * Created by Administrator on 2017/4/17.
  */

import org.apache.spark.{SparkConf, SparkContext}
import scala.collection.mutable.Map
object testVector {
  val conf = new SparkConf()
    .setMaster("local")
    .setAppName("testVector");
  val sc = new SparkContext(conf);
  //将内存数据读入Spark系统中
  val users = sc.parallelize(Array("aaa","bbb","ccc","ddd","eee"));
  val films = sc.parallelize(Array("smzdm","ylxb","znh","nhsc","fcwr"));
  //使用一个source嵌套map作为姓名,电影名和分值的评价
  var source = Map[String,Map[String,Int]]();
  //设置一个用于存放电影分的map
  val filmSource = Map[String,Int]();
  //设置电影评分
  def getSource(): Map[String,Map[String,Int]] = {
    val user1FilmSource = Map("smzdm" -> 2,"ylxb" -> 3,"znh" -> 1,"nhsc" -> 0,"fcwr" -> 1);
    val user2FilmSource = Map("smzdm" -> 1,"ylxb" -> 2,"znh" -> 2,"nhsc" -> 1,"fcwr" -> 4);
    val user3FilmSource = Map("smzdm" -> 2,"ylxb" -> 
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值