Предел размера hclust?

Я новичок в R. Я пытаюсь запустить hclust() примерно на 50 тыс. Элементов. У меня есть 10 столбцов для сравнения и 50К строк данных. Когда я попытался назначить матрицу расстояний, я получаю: "Невозможно выделить вектор размером 5 ГБ".

Есть ли ограничение на размер? Если так, как мне сделать кластер чего-то такого большого?

РЕДАКТИРОВАТЬ

В итоге я увеличил максимальный лимит и увеличил память машины до 8 ГБ, и это, похоже, исправило ее.

2 ответа

Классические подходы иерархической кластеризации O(n^3) во время выполнения и O(n^2) в сложности памяти. Так что да, они невероятно плохо масштабируются для больших наборов данных. Очевидно, что все, что требует материализации матрицы расстояний, находится в O(n^2) или хуже.

Обратите внимание, что есть некоторые специализации иерархической кластеризации, такие как SLINK и CLINK, которые работают в O(n^2)и в зависимости от реализации может также понадобиться только O(n) объем памяти.

Возможно, вы захотите взглянуть на более современные алгоритмы кластеризации. Все, что работает в O(n log n) или лучше должен работать на вас. Есть много веских причин не использовать иерархическую кластеризацию: обычно она довольно чувствительна к шуму (то есть не знает, что делать с выбросами) и результаты трудно интерпретировать для больших наборов данных (дендрограммы хороши, но только для небольших наборов данных).

Ограничение размера устанавливается вашим аппаратным и программным обеспечением, и вы не указали достаточно подробностей, чтобы сказать гораздо больше. На машине с достаточными ресурсами вы не получите эту ошибку. Почему бы не попробовать 10% пробу, прежде чем погрузиться в глубокий конец бассейна? Возможно, начиная с:

reduced <- full[ sample(1:nrow(full), nrow(full)/10 ) , ]
Другие вопросы по тегам