scala_ALS

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值