Eri*_*eng 7 apache-spark apache-spark-mllib
我在推荐系统中遇到了"全对相似"问题.感谢这个数据库博客,似乎RowMatrix可能会提供帮助.
然而,RowMatrix是没有意义的行索引矩阵类型,因此我不知道如何调用后检索相似结果columnSimilarities(threshold)的特定项目i和j
以下是我正在做的一些细节:
1)我的数据文件来自Movielens,格式如下:
user::item::rating
Run Code Online (Sandbox Code Playgroud)
2)我构建了一个RowMatrix,其中每个稀疏向量i代表该项目i的所有用户的评级
val dataPath = ...
val ratings: RDD[Rating] = sc.textFile(dataPath).map(_.split("::") match {
case Array(user, item, rate) => Rating(user.toInt, item.toInt, rate.toDouble)
})
val rows = ratings.map(rating=>(rating.product, (rating.user, rating.rating)))
.groupByKey()
.map(p => Vectors.sparse(userAmount, p._2.map(r=>(r._1-1, r._2)).toSeq))
val mat = new RowMatrix(rows)
val similarities = mat.columnSimilarities(0.5)
Run Code Online (Sandbox Code Playgroud)
现在我得到一个CoordinateMatrix similarities.如何获得特定项目i和j的相似性?虽然它可以用来检索a RDD[MatrixEntry],但我不确定行i和列j是否对应于项目i和j.
小智 10
我遇到了和你一样的问题,并解决了如下问题.
你应该注意columnSimilarities()是调用列向量的相似性.但是,我们的"行"总是由行向量组成.所以你应该得到"行"的转置,让我们假设它是"tran_rows".然后计算tran_rows.columnSimilarities()
事情很简单.在columnSimilarities()的结果中,索引i和j完全对应于项目i和项目j.
| 归档时间: |
|
| 查看次数: |
4444 次 |
| 最近记录: |