Я реализовал распределенную версию K-режимов с использованием pyspark со страницы GitHub (https://github.com/ThinkBigAnalytics/pyspark-distributed-kmodes). Алгоритм после реализации точно следовал методу, описанному в этой статье. (http://www.ijerd.com/paper/vol11-issue3/Version_1/J1137989.pdf)
Вкратце, чтоЯ сначала выбрал случайно выбранные кластеры в каждом разделе, а затем сделал Kmodes в каждом разделе. После этого я запустил локальные Kmodes в главном узле для этих центрированных кластеров из каждого раздела, чтобы найти окончательные кластеры.
Проблема заключается в том, чтоЯ считаю, что он отлично работает с одним главным узлом и двумя рабочими узлами в AWS EMR (оценка силуэта больше 0,7), но становится намного хуже, если я выбираю более двух рабочих узлов или меняю тип рабочих узлов (оценка силуэта меньше 0,3).
В частности:
1) если есть один рабочий узел, результат всегда> 0,7;
2), если есть два рабочих узла, то только еслитип оборудования m4.2xlarge, результат> 0.7;
3) если имеется более двух рабочих узлов, независимо от типа оборудования, результат всегда намного хуже;
Поскольку этот метод основан на разделах, я уже пытался зафиксировать раздел на одном и том же номере каждый раз, используя repartition () или coalesce () перед запуском модели.Но результаты все те же.Кто-нибудь знает, почему это произошло?
Я приложил часть документации в графике для справки (хотя данные в документации очень малы, я также пробовал 50 м строк, и это имеет тот же результат)
Спасибозаранее.
Среда:
AWS EMR: Hadoop 2.8.4;Ливий 0.5.0;Улей 2.3.3;Искра 2.3.2;
AWS Sagemaker: SparkMagic с python34
Документация анализа результатов
![Result Analysis Documentation](https://i.stack.imgur.com/bYmu4.png)