Ошибка памяти при кластеризации K-средних - PullRequest
1 голос
/ 09 июля 2019

Я пытаюсь кластеризовать ключевые фразы из истории поиска, используя K означает кластеризацию, но я сталкиваюсь с ошибкой «не удается выделить вектор размером 30 ГБ», когда я запускаю команду stringdistmatrix (). Набор данных, который я использую, содержит 63455 уникальных элементов, поэтому для обработки полученной матрицы требуется около 30 ГБ памяти. Есть ли способ снизить требования к процессу, не теряя при этом большого значения?

Ниже приведен код, который я пытаюсь запустить, если вы заметили какие-либо другие ошибки:

#Set data source, format for use, check consistency
MyData <- c('Create company email', 'email for business', 'free trial', 'corporate pricing', 'email cost')
summary(MyData)


#Define number of clusters
kclusters = round(0.90 * length(unique(MyData)))

#Compute distance between words
uniquedata <- unique(as.character(MyData))
distancemodels <- stringdistmatrix(uniquedata, uniquedata, method="jw")

#Create Dendrogram
rownames(distancemodels) <- uniquedata
hc <- hclust(as.dist(distancemodels))
par(mar = rep(2, 4))
plot(hc)

#Create clusters from grouped keywords
dfClust <- data.frame(uniquedata, cutree(hc, k=kclusters))
names(dfClust) <- c('data','cluster')
plot(table(dfClust$cluster))

#End view
view(dfClust)

1 Ответ

0 голосов
/ 09 июля 2019

Я не знаю, как избежать генерации матрицы расстояний при кластеризации k-средних.

Вы могли бы рассмотреть альтернативные алгоритмы кластеризации, которые были разработаны, чтобы избежать проблем с памятью.Основным из них является CLARA (кластеризация больших приложений; Kaufman and Rousseeuw 1990 ).В R это просто, как cluster::clara, принимая только числовые данные (например, k-means) и требуя, чтобы вы установили k заранее.

Прочтите руководство (?cluster::clara), особенно о количестве сэмплов, которое вы должны установить выше значения по умолчанию.Надеюсь, это поможет!

edit: только что заметил, что на самом деле у вас нет числовых данных для начала, поэтому, возможно, CLARA не так уж и полезна.Возможно, вы могли бы использовать некоторые из тех же принципов, что и CLARA, включая многократную выборку данных, чтобы уменьшить объем памяти и объединить результаты позже.

...