Предел размера 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 ) , ]