замена кластера объектов на новый кластер, генерирующий наивысший балл SI - PullRequest
1 голос
/ 02 августа 2020

Я новичок в python, так что надеюсь, что кто-нибудь может мне помочь. у нас есть список

     X         LABELS
[0.85142858]     1
[0.85566274]     0
[0.85364912]     0
[0.81536489]     2

Я применил k-средства для кластеризации этих элементов с k = 3.

Следующий скрипт вычисляет максимальную оценку SI для каждого элемента.

for i in range(len(X)):
    s = []
    print("Client", i+1, X[i])

    for label in range(3):
        b = []
        print('S',label, ':')
        a=euclidean_distances(X[[i]], X[kmedoids.medoid_indices_][[label]])
        print('a:', label, a)
        
        for k in range(3):
            if k != label: 
                b.append(euclidean_distances(X[[i]], X[kmedoids.medoid_indices_][[k]]))
                print('b:', k, b)
        bmin=min(b)
        print('miminum b', min(b))
        print('bi-ai', bmin-a)
        print('max{a_i, b_i)', max(a, bmin))
        s.append((bmin-a)/(max(a, bmin)))
        print('SI', s, label)
        print("-------------------")
    max_value = max(s)
    print("SI, max value:", max_value)
    print("***********************")

если мы предположим следующие результаты для элемента 1, где s0, s1, s2 представляют кластеры,

как мы могли бы назначить элемент 1 новому кластеру с максимальным значением (здесь [0,76259282] для кластера 0 )? поэтому мы меняем кластер для элемента 1 на 0 вместо 1.

element 1 [0.85142858]

S 0 :

SI [ array([[0.76259282]])] 
   
-------------------
S 1 :
  
 SI [array([[-0.76259282]])] 
-------------------
S 2 :
 
SI [ array([[-0.96782002]])] 
-------------------
SI, max value: [[0.76259282]]
...