Иерархическая кластеризация текста в масштабе
У меня есть большой набор данных (миллиарды записей), который почти полностью состоит из категориальных переменных. Эти данные будут использованы для прогнозирования довольно редкого численного результата. Большинство атрибутов имеют большую мощность: просто, может быть, несколько образцов попадают в каждую категорию.
Я прочитал, прочитал интересную статью, где они используют иерархическую кластеризацию в R, чтобы уменьшить размерность для аналогичной задачи. Следующий код работал с небольшими наборами данных, но быстро занимал всю память при увеличении:
library(cluster)
numClusters = 42
hc <- hclust(daisy(df))
cutree(hc, k = numClusters)
Я подумал об использовании реализации Mahout's kmeans, но это не сработало бы для категориальных переменных, так как он ожидает вектор двойных чисел.
Есть ли у кого-нибудь в сообществе Stackru какие-либо мысли / советы о том, как выполнять иерархическую кластеризацию по категориальным переменным в масштабе?
1 ответ
Я не знаю, как ответить "как увеличить hclust?" для вашего набора данных. Добавьте больше оборудования / ОЗУ к этой проблеме и / или найдите умную распределенную реализацию (однако Spark MLLib 1.4 не поддерживает иерархическую кластеризацию).
Ваш вопрос немного сбивает с толку, прочитайте, почему я так думаю.
Я не понимаю, как иерархическая кластеризация, в конце концов, поможет вам предсказать числовой атрибут класса.
Если вам определенно необходимо выполнить кластеризацию по категориальным атрибутам, проверьте реализацию EM кластеризатор / алгоритм, например, в R-пакете RWeka. Эта реализация EM по умолчанию определяет самое лучшее число кластеров (возможно, с локальным минимумом?) И дает вам вероятности для каждого категориального значения в иерархии, а также предыдущие вероятности для каждого кластера.
Вы можете использовать другие алгоритмы кластеризации или пакеты.
Если у вас уже есть обучающий набор с атрибутами класса, вы также можете попробовать классификатор RWeka::J48(), чтобы создать дерево решений и некоторые прогнозы. Вы получите что-то иерархическое, и, после настройки, с таким количеством уровней, как вы хотите.
Если вы не хотите использовать RWeka, возможно, используйте пакет rpart::rpart() для дерева решений.