SimpleKMeans kmeans = new SimpleKMeans();
int numberOfClusters = 2;
int[] assignments = null;
kmeans.setSeed(10);
// This is the important parameter to set
kmeans.setPreserveInstancesOrder(true);
try {
kmeans.setNumClusters(numberOfClusters);
kmeans.buildClusterer(instancesOne); // <-- exception being thrown
// This array returns the cluster number (starting with 0) for each instance
// The array has as many elements as the number of instances
assignments = kmeans.getAssignments();
} catch (Exception e) {
e.printStackTrace();
}
Я пытаюсь инициализировать параметры алгоритма EM алгоритмом k-средних. Поэтому я пытаюсь получить 2 центроида, в которых я могу дополнительно подготовить параметры для GMM. Однако я получаю следующую ошибку:Java/WEKA: K Ошибка кластеризации: не удается обработать атрибут класса
weka.core.WekaException: weka.clusterers.SimpleKMeans: Cannot handle any class attribute!
at weka.core.Capabilities.test(Unknown Source)
at weka.core.Capabilities.test(Unknown Source)
at weka.core.Capabilities.testWithFail(Unknown Source)
at weka.clusterers.SimpleKMeans.buildClusterer(Unknown Source)
at hmm.HMM.run(HMM.java:62)
at hmm.HMM.main(HMM.java:22)
Exception in thread "main" java.lang.NullPointerException
at hmm.HMM.run(HMM.java:71)
at hmm.HMM.main(HMM.java:22)
Также как установить два случайных центроида для начала. Я думаю, что метод setSeed() делает это, но как мне получить слово с моим набором данных? Мой файл CSV выглядит так:
И загрузить его так:
Instances instancesOne = loader.loadCsv("train", "class1");
Вот некоторая информация об атрибутах при загрузке:
dataset:
@relation class1
@attribute x numeric
@attribute y numeric
@data
-9.0278,3.1518
-9.5656,3.6383
-9.805,3.8284
etc...
ответа, этот код был необходим, чтобы сделать экземпляры class-less (удалить атрибут класса):
// remove class attribute, make class-less
Instances dataClusterer = null;
weka.filters.unsupervised.attribute.Remove filter = new weka.filters.unsupervised.attribute.Remove();
filter.setAttributeIndices("" + (instancesOne.classIndex() + 1));
try {
filter.setInputFormat(instancesOne);
dataClusterer = Filter.useFilter(instancesOne, filter);
} catch (Exception e1) {
e1.printStackTrace();
return;
}
Где исключение вызывается в вашем коде? –
@MatthewSpencer Обновленный вопрос, возьмите пик! –