Как измерить производительность кластера K-Means в R? [изображение и код включены] - PullRequest
0 голосов
/ 11 апреля 2020

В настоящее время я выполняю кластерный анализ K-средних для некоторых данных клиентов в моей компании. Я хочу измерить производительность этого кластера, я просто не знаю библиотечные пакеты, используемые для измерения производительности этого, и я также не уверен, что мои кластеры сгруппированы слишком близко друг к другу.

Данные, поступающие в мой кластер, представляют собой простые RFM (время, частота и денежная стоимость). Я также включил среднюю стоимость заказа на транзакцию по клиенту. Я использовал метод локтя, чтобы определить оптимальное количество кластеров для использования. Данные состоят из 1400 клиентов и 4 значений метри c.

Прилагается также изображение кластерного графика и код R

Here is my clustering code:

drop = c('CUST_Business_NM')

#Cleaning & Scaling the Data
new_cluster_data = na.omit(data)
new_cluster_data = data[, !(names(data)%in%drop)]
new_cluster_data = scale(new_cluster_data)
glimpse(new_cluster_data)

#Elbow Method for Optimal Clusters
k.max <- 15
data <- new_cluster_data
wss <- sapply(1:k.max, 
              function(k){kmeans(data, k, nstart=50,iter.max = 15 )$tot.withinss})
#Plot out the Elbow
wss
plot(1:k.max, wss,
     type="b", pch = 19, frame = FALSE, 
     xlab="Number of clusters K",
     ylab="Total within-clusters sum of squares")

#Create the Cluster
kmeans_test = kmeans(new_cluster_data, centers = 8, nstart = 1000)
View(kmeans_test$cluster)

#Visualize the Cluster
fviz_cluster(kmeans_test, data = new_cluster_data,  show.clust.cent = TRUE, geom = c("point", "text"))

1 Ответ

2 голосов
/ 11 апреля 2020

Вы, вероятно, не хотите измерять производительность cluster, но производительность cluster algorithm, в данном случае kmeans.

Во-первых, вам необходимо уточнить, что cluster distance measure вы хотите использовать. Результатом вычисления кластера является dissimilarity matrix, поэтому выбор меры расстояния является критическим, вы можете играть с euclidean, manhattan, любым видом correlation или другой мерой расстояния, например, вот так:

library("factoextra")
dis_pearson <- get_dist(yourdataset, method = "pearson")
dis_pearson
fviz_dist(dis_pearson)

Это даст вам матрицу расстояний и визуализирует ее.

Вывод kmeans содержит несколько бит информации. Наиболее важными в отношении вашего вопроса являются:

  • totss: общая сумма квадратов
  • withinss: вектор внутрикластерной суммы квадратов
  • tot.withinss: общая сумма квадратов внутри кластера
  • betweenss: сумма квадратов между кластерами

Таким образом, цель состоит в том, чтобы оптимизировать эти путем игра с расстояниями и другими методами для кластеризации данных. Используя пакет cluster, вы можете просто извлечь эти меры с помощью mycluster <- kmeans(yourdataframe, centers = 2) и затем вызвать mycluster.

Дополнительный комментарий: kmeans требует количества кластеров, определенных пользователем (дополнительные усилия), и он очень чувствителен к выбросам.

...