Индекс Дэвиса-Болдина в Java - PullRequest
       1

Индекс Дэвиса-Болдина в Java

1 голос
/ 07 февраля 2011

Я пишу генетический алгоритм, который пытается выбрать набор точек данных, чтобы максимизировать межкластерное расстояние, сохраняя межкластерное расстояние небольшим, между двумя кластерами.

Я думаю, что некоторая мера надежности кластера такаяпоскольку индекс Дэвиса-Боулдина был бы хорошей функцией пригодности, но я изо всех сил пытаюсь найти реализацию алгоритма в псевдокоде или коде Java.

Может кто-нибудь помочь мне с этим?

Спасибо.

Ответы [ 2 ]

1 голос
/ 29 июля 2015

Я реализовал это в Python на основе https://en.wikipedia.org/wiki/Davies%E2%80%93Bouldin_index

def davies_bouldin(X, labels, cluster_ctr):
    #get the cluster assignemnts
    clusters = set(labels)
    #get the number of clusters
    num_clusters = len(clusters)
    #array to hold the number of items for each cluster, indexed by cluster number
    num_items_in_clusters = [0]*num_clusters
    #get the number of items for each cluster
    for i in range(len(labels)):
        num_items_in_clusters[labels[i]] += 1
    max_num = -9999
    for i in range(num_clusters):
        s_i = intra_cluster_dist(X, labels, clusters[i], num_items_in_clusters[i], cluster_ctr[i])
    for j in range(num_clusters):
        if(i != j):
            s_j = intra_cluster_dist(X, labels, clusters[j], num_items_in_clusters[j], cluster_ctr[j])
            m_ij = np.linalg.norm(cluster_ctr[clusters[i]]-cluster_ctr[clusters[j]])
            r_ij = (s_i + s_j)/m_ij
            if(r_ij > max_num):
                max_num = r_ij
return max_num

def intra_cluster_dist(X, labels, cluster, num_items_in_cluster, centroid):
    total_dist = 0
    #for every item in cluster j, compute the distance the the center of cluster j, take average
    for k in range(num_items_in_cluster):
        dist = np.linalg.norm(X[labels==cluster]-centroid)
        total_dist = dist + total_dist
return total_dist/num_items_in_cluster

Надеюсь, это поможет

1 голос
/ 07 февраля 2011

Быстрый Поиск в Google дал ссылку на эту реализацию . Эта реализация является частью tinatool (библиотека для T-инварианта, связанная срасчеты в биологических сетях в стационарном состоянии) .

...