Ошибка кластерного пакета Функция Daisy () длинные векторы (аргумент 11) не поддерживаются в .C

#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; индексы очень помогли.