Вычислить матрицу различий для больших данных
Я пытаюсь вычислить матрицу различий на основе большого фрейма данных с числовыми и категориальными характеристиками. Когда я бегу daisy
Функция из пакета кластера я получаю сообщение об ошибке:
Ошибка: невозможно выделить вектор размера X.
В моем случае X составляет около 800 ГБ. Любая идея, как я могу справиться с этой проблемой? Кроме того, было бы здорово, если бы кто-нибудь помог мне запустить функцию в параллельных ядрах. Ниже вы можете найти функцию, которая вычисляет матрицу различий в наборе данных iris:
require(cluster)
d <- daisy(iris)
1 ответ
У меня была похожая проблема раньше. Бег daisy()
даже на 5 тыс. строк моего набора данных ушло очень много времени.
Я закончил тем, что использовал kmeans
Алгоритм в h2o
пакет, который распараллеливает и 1-hot кодирует категориальные данные. Я бы просто по центру и масштабировал ваши данные (в среднем 0 w/ stdev = 1), прежде чем подключать их к h2o.kmeans
, Это связано с тем, что алгоритм кластеризации не определяет приоритеты столбцов с высокими номинальными различиями (поскольку он пытается минимизировать вычисление расстояния). Я использовал scale()
функция.
После установки воды:
h2o.init(nthreads = 16, min_mem_size = '150G')
h2o.df <- as.h2o(df)
h2o_kmeans <- h2o.kmeans(training_frame = h2o.df, x = vars, k = 5, estimate_k = FALSE, seed = 1234)
summary(h2o_kmeans)