У меня есть файл 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
Ваша жизнь будет намного проще, если вы используете версию Windows Weka с графическим интерфейсом.
На вкладке кластера есть кнопка для игнорирования атрибутов, таких как ID.
И для идентификаторов для кластеров; после того, как все сделано с выбранным алгоритмом кластеризации, щелкните правой кнопкой мыши результат слева от экрана, затем визуализируйте результаты и затем сохраните.
Я понимаю, что это старый вопрос, но я пришел сюда, чтобы найти ответ, а затем смог сам это выяснить, поэтому поставил свое решение для следующего человека с этой проблемой. В моем случае компонент кластеризации является частью приложения 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 при вычислении сходства.
i < assignments
дляi < assignment.lengths
чтобы он работал.