gpt4 book ai didi

apache-spark - Spark Cosine Similarity(DIMSUM算法)稀疏输入文件

转载 作者:行者123 更新时间:2023-12-03 17:49:57 24 4
gpt4 key购买 nike

我想知道 Spark Cosine Similarity 是否可以处理稀疏输入数据?我见过一些例子,其中输入由以下形式的空格分隔的特征行组成:

id feat1 feat2 feat3 ...

但我有一个固有的稀疏、隐式反馈设置,并希望以以下形式输入:
id1 feat1:1 feat5:1 feat10:1
id2 feat3:1 feat5:1 ..
...

我想利用稀疏性来改进计算。最后,我希望使用 DIMSUM 算法来计算最近已合并到 Spark 中的所有对相似度。有人可以建议一种可以在 Spark 上与 DIMSUM 一起使用的稀疏输入格式吗?我检查了示例代码,并在注释中说“输入必须是一个密集矩阵”,但是这段代码在示例中,所以我不知道它是否仅指一种特定情况。
spark/examples/src/main/scala/org/apache/spark/examples/mllib/CosineSimilarity.scala

这就是我所指的示例代码的路径。

只需几行表示稀疏输入格式的外观(从推荐系统的角度来看,user_id feat1:1 feat2:1 ...),对于处理余弦相似度,将非常有帮助。

如果我将 user_ids 保留为字符串也可以吗?

我知道 libsvm 格式是相似的,但在这种情况下没有用户 id 的概念,只有具有特征的输入实例,所以我想知道 libsvm 格式如何转换为推荐系统域?

对于这些极其简单的问题,我深表歉意,我对 Spark 非常陌生,并且刚刚开始涉足。

任何帮助将非常感激。提前致谢!

最佳答案

为什么不?天真的解决方案可能看起来或多或少是这样的:

// Parse input line
def parseLine(line: String) = {
def parseFeature(feature: String) = {
feature.split(":") match {
case Array(k, v) => (k, v.toDouble)
}
}

val bits = line.split(" ")
val id = bits.head
val features = bits.tail.map(parseFeature).toMap
(id, features)
}

// Compute dot product between to dicts
def dotProduct(x: Map[String, Double], y: Map[String, Double]): Double = ???

// Compute norm of dict
def norm(x: Map[String, Double]): Double = ???

// Compute cosine similarity
def sparseCosine(x: Map[String, Double], y: Map[String, Double]): Double = {
dotProduct(x, y) / (norm(x) * norm(y))
}

// Parse input lines
val parsed = sc.textFile("features.txt").map(parseLine)

// Find unique pairs
val pairs = parsed.cartesian(parsed).filter(x => x._1._1 != x._2._1)

// Compute cosine similarity between pairs
pairs.map { case ((k1, m1), (k2, m2)) => ((k1, k2), sparseCosine(m1, m2)) }

关于apache-spark - Spark Cosine Similarity(DIMSUM算法)稀疏输入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30060206/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com