import org.apache.spark.mllib.recommendation._
val data = sc.textFile("/root/cccc.txt").map(_.split(",") match {case Array (user,product,rating) => Rating (user.toInt,product.toInt,rating.toDouble)})
val model = ALS.train(data,8,10,0.01)
//怎么去观察MatrixFactorizationModel这种黑盒子里的内部结构?
model.Tab键
scala> model.
asInstanceOf isInstanceOf predict productFeatures
rank recommendProducts recommendProductsForUsers recommendUsers
recommendUsersForProducts save toString userFeatures
model.userFeatures take 1 打印用户特征第一行
scala> model.userFeatures take 1
res1: Array[(Int, Array[Double])] = Array((3,Array(-0.21575616300106049, -0.5715493559837341, 0.012001494877040386, 0.050375282764434814, 0.1884985715150833, 0.6539813280105591, -0.023888511583209038, 0.355787068605423)))
model.productFeatures take 1 打印项目特征第一行
scala> model.productFeatures take 1
res2: Array[(Int, Array[Double])] = Array((3,Array(-2.5677483081817627, -1.7736809253692627, -0.8949224948883057, 3.5357284545898438, 1.3151004314422607, -1.8309783935546875, -2.596622943878174, 0.4328916370868683)))
如果要知道用户3对项目3的评分:做内积
val user3 = res1
scala> val user3 = res1
user3: Array[(Int, Array[Double])] = Array((3,Array(-0.21575616300106049, -0.5715493559837341, 0.012001494877040386, 0.050375282764434814, 0.1884985715150833, 0.6539813280105591, -0.023888511583209038, 0.355787068605423)))
val product3 = res2
scala> val product3 = res2
product3: Array[(Int, Array[Double])] = Array((3,Array(-2.5677483081817627, -1.7736809253692627, -0.8949224948883057, 3.5357284545898438, 1.3151004314422607, -1.8309783935546875, -2.596622943878174, 0.4328916370868683)))
现在就是简单的scala的处理了
val user3 = res1(0)._2 //先把第一个值取出来;这个值里面是二元组,._2 取二元组里的第二个值 3
scala> val user3 = res1(0)._2
user3: Array[Double] = Array(-0.21575616300106049, -0.5715493559837341, 0.012001494877040386, 0.050375282764434814, 0.1884985715150833, 0.6539813280105591, -0.023888511583209038, 0.355787068605423)
val product3 = res2(0)._2
scala> val product3 = res2(0)._2
product3: Array[Double] = Array(-2.5677483081817627, -1.7736809253692627, -0.8949224948883057, 3.5357284545898438, 1.3151004314422607, -1.8309783935546875, -2.596622943878174, 0.4328916370868683)
user3 zip product3 map(x => x._1+x._2) sum //通过zip把这两个二元组整合起来
scala> user3 zip product3 map(x => x._1+x._2) sum
warning: there were 1 feature warning(s); re-run with -feature for details
res4: Double = -3.9307828275486827
val data = sc.textFile("/root/cccc.txt").map(_.split(",") match {case Array (user,product,rating) => Rating (user.toInt,product.toInt,rating.toDouble)})
val model = ALS.train(data,8,10,0.01)
//怎么去观察MatrixFactorizationModel这种黑盒子里的内部结构?
model.Tab键
scala> model.
asInstanceOf isInstanceOf predict productFeatures
rank recommendProducts recommendProductsForUsers recommendUsers
recommendUsersForProducts save toString userFeatures
model.userFeatures take 1 打印用户特征第一行
scala> model.userFeatures take 1
res1: Array[(Int, Array[Double])] = Array((3,Array(-0.21575616300106049, -0.5715493559837341, 0.012001494877040386, 0.050375282764434814, 0.1884985715150833, 0.6539813280105591, -0.023888511583209038, 0.355787068605423)))
model.productFeatures take 1 打印项目特征第一行
scala> model.productFeatures take 1
res2: Array[(Int, Array[Double])] = Array((3,Array(-2.5677483081817627, -1.7736809253692627, -0.8949224948883057, 3.5357284545898438, 1.3151004314422607, -1.8309783935546875, -2.596622943878174, 0.4328916370868683)))
如果要知道用户3对项目3的评分:做内积
val user3 = res1
scala> val user3 = res1
user3: Array[(Int, Array[Double])] = Array((3,Array(-0.21575616300106049, -0.5715493559837341, 0.012001494877040386, 0.050375282764434814, 0.1884985715150833, 0.6539813280105591, -0.023888511583209038, 0.355787068605423)))
val product3 = res2
scala> val product3 = res2
product3: Array[(Int, Array[Double])] = Array((3,Array(-2.5677483081817627, -1.7736809253692627, -0.8949224948883057, 3.5357284545898438, 1.3151004314422607, -1.8309783935546875, -2.596622943878174, 0.4328916370868683)))
现在就是简单的scala的处理了
val user3 = res1(0)._2 //先把第一个值取出来;这个值里面是二元组,._2 取二元组里的第二个值 3
scala> val user3 = res1(0)._2
user3: Array[Double] = Array(-0.21575616300106049, -0.5715493559837341, 0.012001494877040386, 0.050375282764434814, 0.1884985715150833, 0.6539813280105591, -0.023888511583209038, 0.355787068605423)
val product3 = res2(0)._2
scala> val product3 = res2(0)._2
product3: Array[Double] = Array(-2.5677483081817627, -1.7736809253692627, -0.8949224948883057, 3.5357284545898438, 1.3151004314422607, -1.8309783935546875, -2.596622943878174, 0.4328916370868683)
user3 zip product3 map(x => x._1+x._2) sum //通过zip把这两个二元组整合起来
scala> user3 zip product3 map(x => x._1+x._2) sum
warning: there were 1 feature warning(s); re-run with -feature for details
res4: Double = -3.9307828275486827