K-средства на Mahout, возвращающие неисключительные кластеры - PullRequest
2 голосов
/ 14 мая 2011

В моих данных есть пользователи со списком лайков, я поместил эти лайки в отдельные файлы для каждого пользователя и хотел бы объединить их в группы.Все работает, за исключением того, что вывод имеет одинаковые лайки в нескольких кластерах.Я понимаю, что K-средства должны быть исключительными.Я полагаю, что проблема, возможно, в том, как я сбрасываю данные.Я также отбросил все лайки без пробелов, пока не смогу написать собственный токенизатор.Вот что я запускаю (из сценария ruby).

system("#{MAHOUT_CMD} seqdirectory -c UTF-8 -i data/users -o data/kmeans/converted")
system("#{MAHOUT_CMD} seq2sparse -i data/kmeans/converted -o data/kmeans/vectors")
system("#{MAHOUT_CMD} kmeans -i data/kmeans/vectors/tfidf-vectors -c data/kmeans/initial_clusters -o data/kmeans/kmeans_clusters -dm org.apache.mahout.common.distance.EuclideanDistanceMeasure -cd 0.1 -k 20 -x 20")

last_cluster_folder = Dir["data/kmeans/kmeans_clusters/*"].last.gsub("data/kmeans/kmeans_clusters/", "")

system("#{MAHOUT_CMD} clusterdump -s data/kmeans/kmeans_clusters/#{last_cluster_folder}/ -d data/kmeans/vectors/dictionary.file-0 -dt sequencefile -o data/kmeans/clusters.txt -n 1000")

В выводе перечислены «верхние термины» в каждом кластере, однако многие лайки происходят в каждом кластере (хотя и с разными весами).Является ли нормальный вывод для clusterdumper, мне нужно выяснить, к какому кластеру относится каждое слово по весу?

Спасибо

1 Ответ

0 голосов
/ 15 января 2012

Mahout, вероятно, только делает приблизительное k-средних. Кроме того, могут существовать объекты, имеющие одинаковое расстояние до нескольких кластеров.

Однако вы должны иметь возможность просто взять средство k, а затем выполнить классификацию 1-ближайшего соседа, чтобы получить уникальный результат для каждого объекта (распараллелить это очень просто и очень быстро).

...