加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 如何使用RowMatrix.columnSimilarities的输出

发布时间:2020-12-15 01:06:52 所属栏目:Java 来源:网络整理
导读:我需要计算一行的列之间的相似性,并尝试使用columnsimilarities()方法来获得结果. public static void main(String[] args) { SparkConf sparkConf = new SparkConf().setAppName("CollarberativeFilter").setMaster("local"); JavaSparkContext sc = new Ja

我需要计算一行的列之间的相似性,并尝试使用columnsimilarities()方法来获得结果.

public static void main(String[] args) {

    SparkConf sparkConf = new SparkConf().setAppName("CollarberativeFilter").setMaster("local");
        JavaSparkContext sc = new JavaSparkContext(sparkConf);
        SparkSession spark = SparkSession.builder().appName("CollarberativeFilter").getOrCreate();
        double[][] array = {{5,5},{0,10,0},{5,5}};
        LinkedList

但是

output in the text file was 0,2,0.9999999999999998

.

接下来,我尝试使用double [] [] array = {{1,3},{2,7}};
那么

output of the text file was 0,1,0.9982743731749959

有人可以解释我的答案格式.我不能得到矩阵的每一列对的分数.如3乘3矩阵我需要3个分数1,2列之间的相似性,3列,3,1列.
任何帮助赞赏.

最佳答案
使用如下定义的Cosine Similarity计算列相似度:

Cosine Similarity

由于你包含了scala标签,我将作弊并重复你在Scala REPL中所做的事情:

scala> import org.apache.spark.mllib.linalg.{Vectors,Vector}
import org.apache.spark.mllib.linalg.{Vectors,Vector}

scala> import org.apache.spark.mllib.linalg.distributed.RowMatrix
import org.apache.spark.mllib.linalg.distributed.RowMatrix

scala> val matVec = Vector(Vectors.dense(5,5),Vectors.dense(0,0),Vectors.dense(5,5))
matVec: scala.collection.immutable.Vector[org.apache.spark.mllib.linalg.Vector] = Vector([5.0,0.0,5.0],[0.0,10.0,0.0],[5.0,5.0])

scala> val matRDD = sc.parallelize(matVec)
matRDD: org.apache.spark.rdd.RDD[org.apache.spark.mllib.linalg.Vector] = ParallelCollectionRDD[44] at parallelize at 

此输出表示在(row0,col2)处只有一个非零条目.因此实际(上三角)输出是:

0    0    .9999
0    0    0
0    0    0

这是你所期望的(因为col0和col1之间的点积为零,col1和col2之间的点积为零)

这是一个稀疏列相似性矩阵的示例:

scala> def randVec(len: Int) : org.apache.spark.mllib.linalg.Vector =
     | Vectors.dense(Array.fill(len)(Random.nextDouble))
randVec: (len: Int)org.apache.spark.mllib.linalg.Vector

scala> val randRDD = sc.parallelize(Seq.fill(3)(randVec(4))
randRDD: org.apache.spark.rdd.RDD[org.apache.spark.mllib.linalg.Vector] = ParallelCollectionRDD[123] at parallelize at 

代表以下矩阵:

0       0.74027     0.92382     0.46308
0       0           0.74186     0.86625
0       0           0           0.33700
0       0           0           0

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读