考虑三种情况:
- 您的所有节点都在一个密集的集群中。
- 您的所有节点都在一个集群中,但集群很宽。
- 您的许多节点都在集群中,但少数节点远离集群。
您在所有成对距离上的总和很好地捕获了 (1) 和 (2):紧密的集群比大型集群给出的结果更小。它对(3)有什么作用?这里,e
节点总数的一部分N
距离很远,平均距离为D
。其他(1-e)N
节点在平均距离为d
.
现在,必须考虑多少成对连接?对于集群节点,有((1-e)N)^2=e^2*N^2-2*e*N^2+N^2
这样的连接。对于遥远的节点,有e^2*N^2
连接。
现在,将这些值乘以平均距离。这给出了 的总成对平均值(d*(e^2*N^2-2*e*N^2+N^2)+D*(e^2*N^2))/N
。现在,假设它e
很小,我们可以忽略包含 的项e^2
。因此,平均值为d*(N^2-2*e*N^2)/N
。
现在,考虑您的第二个指标:每个人与平均中心点的距离。这在 (1) 和 (2) 上也很好:紧密的集群比较大的集群具有更小的结果。3 的表现如何?用e
同上来表示异常值的比例。现在,节点到中心点的平均距离由下式给出(d*(1-e)*N+D*e*N)/N
。换句话说,集群节点的权重不再那么大。
有没有一种方法可以让您进行轻量级计算并且仍然更适当地加权集群节点?我认同。
我的建议是您从列表中选择随机节点对,计算节点间距离,然后对结果进行平均。对于 (1) 紧密集群,所有节点将靠近在一起,因此您绘制的所有随机对都将接近您在计算中得到的成对平均值。对于 (2),松散簇,同样如此。对于 (3),一个具有异常值的集群,您更有可能从集群内部绘制节点而不是从外部绘制节点,因此异常值最终会被忽略。
随着您增加采样节点的数量,集群将倾向于主导随机采样。我猜这将提供不错的准确性O(N)
而不是O(N^2)
时间。