График K-средних означает нереальные точки в R - PullRequest
0 голосов
/ 10 мая 2018

Я пытаюсь построить кластер K-Means для анализа различных категорий продуктов на основе их среднего инвентарного количества и проданного количества.

Все значения неотрицательны и имеют одинаковую единицу измерения.Я не знаю, что я сделал неправильно, и результаты содержат точку с отрицательными значениями.На самом деле, я считаю, что все точки, приведенные на графике, не являются действительными точками из моих данных.

Cluster of categories for sold quantity and inventory

Вот мой код:

reduced_dataset = dataset[1:20, 4:5]

# Using the elbow method to find the optimal number of clusters
wcss = vector()
for (i in 1:10) wcss[i] = sum(kmeans(reduced_dataset, i)$withinss)
plot(1:10,
 wcss,
 type = 'b',
 main = paste('The Elbow Method'),
 xlab = 'Number of clusters',
 ylab = 'WCSS')

# As a result, number of clusters should be 2

# Fitting K-Means to the dataset
kmeans = kmeans(x = reduced_dataset, centers = 2)
y_kmeans = kmeans$cluster

# Visualising the clusters
library(cluster)
clusplot(reduced_dataset,
     y_kmeans,
     lines = 0,
     shade = TRUE,
     color = TRUE,
     labels = 2,
     plotchar = FALSE,
     span = TRUE,
     main = paste('Clusters of categories - NOT ON SALE'),
     xlab = 'Average Sold Quantity',
     ylab = 'Average Inventory')

dput(reduced_dataset):

structure(list(Avg_Sold_No_Promo = c(0.255722695, 1.139983236, 
0.458651842, 0.784966698, 1.642746914, 0.115264798, 7.50338696, 
0.487603306, 1.023373984, 0.956099815, 1.505901506, 0.253837072, 
0.834963325, 0.880898876, 6.527699531, 11.54054054, 3.44077135, 
0.750182882, 0.251033058, 1.875698324), Avg_Inventory_No_Promo = 
c(6.068672335, 
22.57865326, 9.00694927, 11.56137012, 28.47530864, 7.485981308, 
170.9064352, 11.07438017, 22.80792683, 40.63863216, 41.73463573, 
10.87603306, 35.87408313, 46.09213483, 185.5671362, 315.6015693, 
165.1129477, 78.18032187, 9.65857438, 198.4385475)), .Names = 
c("Avg_Sold_No_Promo", 
"Avg_Inventory_No_Promo"), row.names = c(NA, 20L), class = "data.frame")

Может кто-нибудь, пожалуйста, помогите мне?

1 Ответ

0 голосов
/ 11 мая 2018

Функция clusplot делает это автоматически.

Это называется PCA, и именно поэтому вы получаете строку с объясненной там изменчивостью.

...