如何衡量三个向量之间的相似性?

时间:2014-12-31 22:06:39

标签: sas

如何测量三个向量之间的相似性? 假设我有三个学生和他们的科目标记。 学生1(12,23,43,35,21)
学生2(23,34,45,25.17)和 学生3(34,43,22,11,39)
现在我想衡量这三个学生之间的相似性。谁可以帮我这个事。提前谢谢。

1 个答案:

答案 0 :(得分:0)

你想要相似性,而不是相异性。后者有许多功能,一些在评论中提到。最常用的不相似度量是欧几里德距离。

要测量相似度,您可以使用R中simil(...)包中的proxy函数,如下所示。假设每个学生的分数顺序相同,您可以将分数组合成一个矩阵,然后:

Student.1 <- c(12, 23, 43, 35, 21)
Student.2 <- c(23, 34, 45, 25, 17)
Student.3 <- c(34, 43, 22, 11, 39)
students <- rbind(Student.1,Student.2,Student.3)

library(proxy)
simil(students,method="Euclidean")
#               Student.1  Student.2
# Student.2 0.04993434           
# Student.3 0.02075985 0.02593140

这计算每个学生与其他学生的欧几里德距离,并使用

将其转换为相似度分数
  

sim = 1 /(1 + dist)

因此,如果两个学生的分数相同,则它们的相似度为1。

但这只是一种方法。在proxy包中编码了48个相似/距离度量,可以使用以下列出:

pr_DB$get_entries()

您甚至可以使用例如

编码自己的指标
simil(students,FUN=f)

其中f(x,y)是一个函数,它将两个向量作为参数,并返回根据需要定义的相似度分数。例如,如果某些课程是“更重要的”,那么这可能是相关的。从某种意义上说,你想要比其他课程更重视这些课程的差异。