Получить назначения кластера в Сохранить

1

У меня есть файл CSV следующим образом:

id,at1,at2,at3
1072,0.5,0.2,0.7
1092,0.2,0.5,0.7
...

Я загрузил его в Weka для кластеризации:

DataSource source = new DataSource("test.csv");
Instances data = source.getDataSet();
kmeans.buildClusterer(data);

Вопрос №1: Как установить первый столбец как идентификатор? то есть. игнорируя первый столбец для целей кластеризации.

Затем я пытаюсь распечатать задания:

int[] assignments = kmeans.getAssignments();
int i = 0;
for (int clusterNum : assignments) {
    System.out.printf("Instance %d -> Cluster %d \n", i, clusterNum);
    i++;
}

Это печатает:

Instance 1 -> Cluster 0 
Instance 2 -> Cluster 2
...

Вопрос №2: Как я могу ссылаться на идентификатор при печати заданий? Например:

Instance 1072 -> Cluster 0
Instance 1092 -> Cluster 2
Теги:
k-means
cluster-analysis
weka

2 ответа

2
Лучший ответ

Ваша жизнь будет намного проще, если вы используете версию Windows Weka с графическим интерфейсом.

На вкладке кластера есть кнопка для игнорирования атрибутов, таких как ID.

И для идентификаторов для кластеров; после того, как все сделано с выбранным алгоритмом кластеризации, щелкните правой кнопкой мыши результат слева от экрана, затем визуализируйте результаты и затем сохраните.

6

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

int[] assignments = kmeans.getAssignments();
for (int i = 0; i < assignments; i++) {
  int id = (int) data.instance(i).value(0); // cast from double
  System.out.printf("ID %d -> Cluster %d \n", id, assignments[i]);
}

В отличие от OP, я не создавал свои экземпляры из DataSource.getDataSet(), я создал это вручную из таблицы базы данных, но поле id было первым в моем случае, поэтому я думаю, что код выше должен работать. У меня была пользовательская функция расстояния, которая пропускала поле id при вычислении сходства.

  • 0
    Как насчет кластеризации? Вы сделали что-нибудь, чтобы игнорировать столбец id для целей кластеризации ?? !!
  • 0
    Спасибо, вы мне помогли! Маленькая вещь, хотя; Я изменил i < assignments для i < assignment.lengths чтобы он работал.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню