Java K-означает реализацию с неожиданным выводом - PullRequest
0 голосов
/ 27 февраля 2012

Я использую проект Trickl-Cluster для кластеризации моего набора данных и Colt для запоминания объектов данных в матрицах.

После выполнения этого кода

import cern.colt.matrix.DoubleMatrix2D;
import cern.colt.matrix.impl.DenseDoubleMatrix2D;
import com.trickl.cluster.KMeans;

DoubleMatrix2D dm1 = new DenseDoubleMatrix2D(3, 3);
dm1.setQuick(0, 0, 5.9);
dm1.setQuick(0, 1, 1.6);
dm1.setQuick(0, 2, 18.0);
dm1.setQuick(1, 0, 2.0);
dm1.setQuick(1, 1, 3.5);
dm1.setQuick(1, 2, 20.3);
dm1.setQuick(2, 0, 11.5);
dm1.setQuick(2, 1, 100.5);
dm1.setQuick(2, 2,6.5);
System.out.println (dm1);

KMeans km = new KMeans();
km.cluster(dm1 ,1);
DoubleMatrix2D dm11 = km.getPartition();
System.out.println (dm11);
DoubleMatrix2D dm111 = km.getMeans();
System.out.println (dm111); 

у меня было следующееoutput

3 x 3 matrix
5.9   1.6 18  
2     3.5 20.3
11.5 100.5  6.5

3 x 1 matrix
1
1
1

3 x 1 matrix
6.466667
35.2     
14.933333

Следуя шагам алгоритма, странно, когда кто-то ожидает 1 кластер и имеет 3 средства. В документации не совсем ясно об этой конкретной точке.

Это определение методаКластер в соответствии с Java-документом проекта

void cluster(cern.colt.matrix.DoubleMatrix2D data, int clusters) 

Таким образом, логически int clusters представляет число ожидаемых кластеров после завершения K-средних.

Есть ли у вас какие-либо идеи освязь между выходными данными класса K-средних в проекте и ожидаемыми результатами алгоритма K-средних?

1 Ответ

3 голосов
/ 28 февраля 2012

Это одно 3-мерное среднее. Если вы вводите трехмерные данные, вы получаете трехмерные средства.

Обратите внимание, что запуск k-средних с k = 1 абсолютно бессмысленен, поскольку он просто вычислит среднее значение набора данных:

(5.9+2+11.5) / 3 = 6.466667
(1.6+3.5+100.5) / 3 = 35.2
(18+20.3+6.5) / 3 = 14.933333

Результат, очевидно, правильный.

...