我想对集群中两点之间的相似度进行度量。
这样计算出的相似度是否可以作为两个数据点之间相似度的可接受度量?
说我必须在同一群集中的向量:vector A and vector B
。我已经训练了一个簇,该簇用model
表示,然后model.computeCost()
计算输入点和相应簇中心之间的平方距离。
(我正在使用Apache Spark MLlib)
val costA = model.computeCost(A)
val costB = model.computeCost(B)
val dissimilarity = |cost(A)-cost(B)|
差异性,即值越高,彼此之间的差异就越大。
最佳答案
如果您只是问这是一个有效的度量标准,那么答案就差不多了,如果只有.computeCost
是确定性的,那么它就是一个有效的伪度量标准。
为简单起见,我分别表示f(A) := model.computeCost(A)
和d(A, B) := |f(A)-f(B)|
简短的证明:d
是应用于某些功能图像的L1,因此是伪度量本身,并且是f
是内射性的度量(通常,您的不是)。
较长的证明:d(A,B) >= 0
是的,因为|f(A) - f(B)| >= 0
d(A,B) = d(B,A)
是的,因为|f(A) - f(B)| = |f(B) - f(A)|
d(A,B) = 0
iff A=B
,不,这就是为什么它是伪度量的,因为您可以有很多A != B
这样的f(A) = f(B)
d(A,B) + d(B,C) <= d(A,C)
是的,直接来自绝对值相同的不等式。
如果您要问它是否可以解决您的问题,那么答案可能取决于问题。如果不分析您的问题和数据,就无法回答。如上所示,这是一个有效的伪度量,因此它将从数学的角度衡量某些行为。它是否适用于您的特定情况是完全不同的故事。好处是,大多数适用于度量的算法也将与伪度量一起使用。唯一的区别是,您只需简单地将具有相同图像(f(A)=f(B)
)的点“粘合”在一起,如果这不是您要解决的问题,那么您可以在任何基于度量的推理中应用这种伪度量,而不会出现任何问题。实际上,这意味着如果您的f
是
计算输入点和相应聚类中心之间距离的平方和
这意味着这实际上是到最近的中心的距离(当您考虑单个点时,不涉及求和)。这意味着,当两个单独的群集中的两个点距自己的群集中心相等距离时,它们被认为是相同的。因此,您的度量捕获了“点及其各自簇的关系有多么不同”。这是一个定义明确的间接不相似性计算,但是在应用它之前,您必须完全了解正在发生的事情(因为它将产生特定的后果)。