91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

spark mllib 協同過濾算法之如何實現基于余弦相似度的用戶相似度計算

發布時間:2021-12-16 14:38:41 來源:億速云 閱讀:141 作者:小新 欄目:云計算

這篇文章主要介紹了spark mllib 協同過濾算法之如何實現基于余弦相似度的用戶相似度計算,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

運行代碼如下

/**
  *  協同過濾算法,基于余弦相似度的用戶相似度計算
  *  一般來說歐幾里得相似度用來表現不同目標的絕對差異性,分析目標之間的相似性與差異情況.
  *  而余弦相似度更多的是對目標從前進趨勢上進行區分.
  */
package spark.collaborativeFiltering

import org.apache.spark.{SparkConf, SparkContext}

import scala.collection.mutable.Map

object sparkCollaborativeFiltering {
  val conf = new SparkConf()
    .setMaster("local")
    .setAppName("CollaborativeFilteringSpark ")	//設置環境變量
  val sc = new SparkContext(conf) //實例化環境
  val users = sc.parallelize(
      Array("張三","李四","王五","朱六","卓七")
    ) //設置用戶
  val films = sc.parallelize(
      Array("飄","龍門客棧","羅密歐與朱麗葉","澳門風云","狼圖騰")
    )	//設置電影名

  //使用一個source嵌套map作為姓名電影名和分值的存儲
  val source = Map[String,Map[String,Int]]()
  val filmSource = Map[String,Int]()//設置一個用以存放電影分的map
  def getSource(): Map[String,Map[String,Int]] = {//設置電影評分
    val user1FilmSource = Map("飄" -> 2,"龍門客棧" -> 3,
      "羅密歐與朱麗葉" -> 1,"澳門風云" -> 0,"狼圖騰" -> 1)
    val user2FilmSource = Map("飄" -> 1,"龍門客棧" -> 2,
      "羅密歐與朱麗葉" -> 2,"澳門風云" -> 1,"狼圖騰" -> 4)
    val user3FilmSource = Map("飄" -> 2,"龍門客棧" -> 1,
      "羅密歐與朱麗葉" -> 0,"澳門風云" -> 1,"狼圖騰" -> 4)
    val user4FilmSource = Map("飄" -> 3,"龍門客棧" -> 2,
      "羅密歐與朱麗葉" -> 0,"澳門風云" -> 5,"狼圖騰" -> 3)
    val user5FilmSource = Map("飄" -> 5,"龍門客棧" -> 3,
      "羅密歐與朱麗葉" -> 1,"澳門風云" -> 1,"狼圖騰" -> 2)
    source += ("張三" -> user1FilmSource)//對人名進行存儲
    source += ("李四" -> user2FilmSource)
    source += ("王五" -> user3FilmSource)
    source += ("朱六" -> user4FilmSource)
    source += ("卓七" -> user5FilmSource)
    source			//返回嵌套map
  }

  //兩兩計算分值,采用余弦相似性
  def getCollaborateSource(user1:String,user2:String):Double = {
    val user1FilmSource = source.get(user1)
        .get.values.toVector	//獲得第1個用戶的評分
    val user2FilmSource = source.get(user2)
        .get.values.toVector	//獲得第2個用戶的評分
    val member = user1FilmSource.zip(user2FilmSource)
        .map(d => d._1 * d._2).reduce(_ + _)
        .toDouble//對公式分子部分進行計算,zip將若干RDD 壓縮成一個RDD
    val temp1  = math.sqrt(user1FilmSource.map(num => {	//求出分母第1個變量值
        math.pow(num,2)	//數學計算
      }).reduce(_ + _))	//進行疊加
    val temp2  = math.sqrt(user2FilmSource.map(num => {//求出分母第2個變量值
        math.pow(num,2)//數學計算
      }).reduce(_ + _))//進行疊加
    val denominator = temp1 * temp2	//求出分母
    member / denominator//進行計算
  }

  def main(args: Array[String]) {
    getSource()		//初始化分數
    val name = "李四"    //設定目標對象
    users.foreach(user =>{//迭代進行計算
      println(name + " 相對于 " + user +"的相似性分數是:"+
      getCollaborateSource(name,user))
    })
  }
}

結果如圖

spark mllib 協同過濾算法之如何實現基于余弦相似度的用戶相似度計算

感謝你能夠認真閱讀完這篇文章,希望小編分享的“spark mllib 協同過濾算法之如何實現基于余弦相似度的用戶相似度計算”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

台北县| 同德县| 奎屯市| 建湖县| 广灵县| 陇南市| 准格尔旗| 兰西县| 隆昌县| 张家口市| 小金县| 塘沽区| 建宁县| 雅江县| 彩票| 视频| 甘谷县| 汉沽区| 南华县| 临洮县| 恩施市| 什邡市| 信阳市| 集安市| 通榆县| 北宁市| 盈江县| 惠东县| 文化| 泸溪县| 逊克县| 大丰市| 河北区| 九江市| 中江县| 南宫市| 浦城县| 太白县| 佳木斯市| 平武县| 阳曲县|