找到集群的中心

时间:2009-08-10 08:52:51

标签: algorithm cluster-analysis data-mining

我有以下问题 - 提出摘要以解决关键问题。

我每个都有10个点,与另一个距离。我想

  1. 能够找到群集的中心,即与彼此的点成对距离最小化的点,
    令p(j)~p(k)表示成对距离beteen点j和k
    p(i)是簇的中心点iff p(i)s.t.全部0< min [sum(p(j)~p(k))] j,k< = n我们在集群中有n个点
  2. 确定一旦群集中的数据点数超过某个阈值t,如何将群集拆分为两个群集。
  3. 这不是欧几里德的空间。但是距离可以总结如下 - p(i)是点i:

           p(1)    p(2)    p(3)    p(4)    p(5)    p(6)    p(7)    p(8)    p(9)    p(10)
    p(1)    0       2       1       3       2       3       3       2       3        4
    p(2)    2       0       1       3       2       3       3       2       3        4
    p(3)    1       1       0       2       0       1       2       1       2        3
    p(4)    3       3       2       0       1       2       3       2       3        4      
    p(5)    2       2       1       1       0       1       2       1       2        3   
    p(6)    3       3       2       2       1       0       3       2       3        4   
    p(7)    3       3       2       3       2       3       0       1       2        3  
    p(8)    2       2       1       2       1       2       1       0       1        2 
    p(9)    3       3       2       3       2       3       2       1       0        1
    p(10)   4       4       3       4       3       4       3       2       1        0 
    

    我如何计算该群集的中心点?

4 个答案:

答案 0 :(得分:8)

据我所知,这看起来像K Means Clustering,而你所寻找的通常被称为'Medoids'。

  

请参阅此处:http://en.wikipedia.org/wiki/Medoids或此处:http://en.wikipedia.org/wiki/K-medoids

答案 1 :(得分:3)

我可能会在显示完全愚蠢之前出现那种颤抖。但这不容易屈服于暴力吗?在Python中:

distances = [
[ 0 , 2 , 1 , 3 , 2 , 3 , 3 , 2 , 3 , 4 , ],
[ 2 , 0 , 1 , 3 , 2 , 3 , 3 , 2 , 3 , 4 , ],
[ 1 , 1 , 0 , 2 , 0 , 1 , 2 , 1 , 2 , 3 , ],
[ 3 , 3 , 2 , 0 , 1 , 2 , 3 , 2 , 3 , 4 , ],
[ 2 , 2 , 1 , 1 , 0 , 1 , 2 , 1 , 2 , 3 , ],
[ 3 , 3 , 2 , 2 , 1 , 0 , 3 , 2 , 3 , 4 , ],
[ 3 , 3 , 2 , 3 , 2 , 3 , 0 , 1 , 2 , 3 , ],
[ 2 , 2 , 1 , 2 , 1 , 2 , 1 , 0 , 1 , 2 , ],
[ 3 , 3 , 2 , 3 , 2 , 3 , 2 , 1 , 0 , 1 , ],
[ 4 , 4 , 3 , 4 , 3 , 4 , 3 , 2 , 1 , 0 , ],
]

currentMinimum = 99999

for point in range ( 10 ) :
    distance_sum = 0
    for second_point in range ( 10 ) :
        if point == second_point : continue
        distance_sum += distances [ point ] [ second_point ]
    print '>>>>>', point, distance_sum 

    if distance_sum < currentMinimum :
        currentMinimum = distance_sum 
        centre = point

print centre

答案 2 :(得分:1)

A)

  • 找到所有距离的中位数或平均值。 = avgAll
  • 对于每个p,找到与其他机器的平均距离。 = avgP(i)
  • 选择较近的一个作为中心。 avgAll~ = avgP(i)

b)中 现在不知道..

也许每个p,找到更近的机器。

通过这个逻辑制作图表。

比某种程度(我还不知道)划分图表

答案 3 :(得分:0)

您尝试做什么,或者至少(b)属于Cluster Analysis。数学/统计/计量经济学的一个分支,其中数据点(例如,n维空间中的点)在组或集群之间划分。如何做到这一点不是一个微不足道的问题,有很多很多可能的方法。

the wikipedia article on cluster analysis了解详情。