#r #csv #amazon-ec2 #cluster-analysis #r-daisy
#r #csv #amazon-ec2 #кластерный анализ #r-daisy
Вопрос:
Попытка преобразовать a data.frame
с числовыми, номинальными и NA значениями в матрицу различий с использованием daisy
функции из cluster
пакета в R. Моя цель заключается в создании матрицы различий перед применением кластеризации k-средних для сегментации клиентов. В data.frame
нем 133 153 строки и 36 столбцов. Вот моя машина.
sessionInfo()
R version 3.1.0 (2014-04-10)
Platform x86_64-w64-mingw32/x64 (64-bit)
Как я могу исправить предупреждение daisy?
Поскольку компьютер с Windows имеет 3 Гб оперативной памяти, я увеличил виртуальную память до 100 ГБ, надеясь, что этого будет достаточно для создания матрицы — это не сработало. Я все еще получил пару ошибок в памяти. Я изучил другие пакеты R для решения проблемы с памятью, но они не работают. Я не могу использовать bigmemory
с biganalytics
пакетом, потому что он принимает только числовые матрицы. Пакеты clara
и ff
также принимают только числовые матрицы.
cluster
Пакет CRAN предлагает коэффициент подобия Гауэра в качестве меры расстояния перед применением k-средних. Коэффициент Гауэра принимает числовые, номинальные и NA значения.
Store1 <- read.csv("/Users/scdavis6/Documents/Work/Client1.csv", head=FALSE)
df <- as.data.frame(Store1)
save(df, file="df.Rda")
library(cluster)
daisy1 <- daisy(df, metric = "gower", type = list(ordratio = c(1:35)))
#Error in daisy(df, metric = "gower", type = list(ordratio = c(1:35))) :
#long vectors (argument 11) are not supported in .C
** РЕДАКТИРОВАТЬ: у меня есть RStudio, подключенный к Amazon Web Service (AWS) r3.8xlarge с объемом памяти 244 ГБ и 32 vCPU. Я попытался создать матрицу daisy на своем компьютере, но не хватило оперативной памяти. **
** РЕДАКТИРОВАНИЕ 2: я использовал функцию clara для кластеризации набора данных. **
#50 samples
clara2 <- clara(df, 3, metric = "euclidean", stand = FALSE, samples = 50,
rngR = FALSE, pamLike = TRUE)
Комментарии:
1. У кого-нибудь есть какие-либо предложения?
Ответ №1:
Используйте алгоритмы, которые не требуют O (n ^ 2) памяти, если у вас много данных. Замена на диск приведет к снижению производительности, это не разумный вариант.
Вместо этого попробуйте либо уменьшить размер набора данных, либо использовать ускорение индекса, чтобы избежать затрат памяти O (n ^ 2). (И это не только O (n ^ 2) памяти, но и O (n ^ 2) вычислений расстояния, что займет много времени!)
Комментарии:
1. Как бы мне ускорить индексацию? Сначала загрузите данные в MySQL, прежде чем создавать последовательную матрицу? Есть пакет RMySQL, я изучу его.
2. Нет, даже не думайте прикасаться к MySQL. Я не использовал daisy, поэтому я не знаю, можно ли ускорить индексацию. Вы не можете просто использовать волшебное ускорение индекса для всего. Именно по этой причине нет пакета «RmakeMagicIndexAcceleration». Методы и реализации должны быть разработаны для ускорения таким образом, и похоже, что эта реализация daisy предназначена для вычисления матрицы с верхней диагональю.
3. В ELKI много алгоритмов ускорения индекса, но я не видел daisy в этом списке. И это не R.
4. извините за поздний ответ. Я решил использовать Amazon Web Services из-за требований к оперативной памяти. Спасибо, что показали ELKI.
5. Возможно, вы сможете обобщить результаты в O (n) для полного набора данных. См., Например, кластеризацию CLARA . Он запускает k-medoids только для выборки. Затем присваивает полный набор данных этим медиамодулям. Это O (n), если вы можете позволить себе выбрать достаточно малую частоту дискретизации, тогда как PAM, вероятно, равен O (n ^ 3) или около того. О, и вы можете попробовать использовать ускорение индекса , которое для некоторых алгоритмов может привести к значительному ускорению. Я сгруппировал 100k за несколько минут с помощью ELKI; индексы очень помогли.