Хобрук: Ваш путь к мастерству в программировании

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

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

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

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

Спасибо.


  • Рассматривали ли вы вместо этого использование линейного дискриминантного анализа? См. en.wikipedia.org/wiki/. 07.02.2011
  • @ mr-fr0g Нет, это небольшой компонент моей диссертации, для которого мне разрешено использовать (правильно цитируемый) открытый исходный код. Я пытался провести такую ​​меру, как среднее межкластерное сходство косинусов + (1-среднее внутрикластерное сходство косинусов) и попытаться достичь наименьшего балла, но это не сработало, оно колебалось около отметки 0,9999. 07.02.2011

Ответы:


1

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

07.02.2011

2

Я реализовал его на 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

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

29.07.2015
Новые материалы

Создание кнопочного меню с использованием HTML, CSS и JavaScript
Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

Внедрите OAuth в свои веб-приложения для повышения безопасности
OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

Классы в JavaScript
class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

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

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

Обзор: Машинное обучение: классификация
Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

Разработка расширений Qlik Sense с qExt
Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..