Clustering

KMeans

Primeiro, geramos alguns centroides e uns pontos aos seus redores:


In [15]:
set.seed(42)
somex <- rnorm(4) # Abscissas dos centroides
somey <- rnorm(4)
X <- numeric(104) # 4 para os centroides e 100 para as amostras
Y <- numeric(104) # 4 para os centroides e 100 para as amostras
j <- 1
for (i in 1:4) { # Para cada centroide, vamos gerar alguns pontos
    X[j] <- somex[i]
    Y[j] <- somey[i]
    j = j + 1
    for (z in 1:25) {
        xz <- 0.12 * rnorm(1) + somex[i]
        yz <- 0.12 * rnorm(1) + somey[i]
        X[j] <- xz
        Y[j] <- yz
        j = j + 1
    }
}

Agora, vamos plotar esses pontos gerados:


In [23]:
plot(X,Y)
points(somex,somey, pch = 8, col = 2, cex = 9)


No gráfico, você vê os centroides marcados como o centro dos cruzamentos de linhas, e os outros pontos em volta.


In [34]:
df <- data.frame(x = X, y = Y)
modelo <- kmeans(df,4)

In [29]:
modelo


K-means clustering with 4 clusters of sizes 15, 52, 11, 26

Cluster means:
           x           y
1 -0.6624353 -0.09825517
2  0.9937956  0.15575292
3 -0.4665211 -0.03672141
4  0.3367062  1.47904936

Clustering vector:
  [1] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 3 1 3 3 1 3 1 3
 [38] 1 3 1 1 1 3 3 3 1 1 3 3 1 1 1 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
 [75] 4 4 4 4 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2

Within cluster sum of squares by cluster:
[1]  0.2520460 11.9370096  0.1052387  0.5583075
 (between_SS / total_SS =  86.5 %)

Available components:

[1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss"
[6] "betweenss"    "size"         "iter"         "ifault"      

In [31]:
modelo$cluster


  1. 2
  2. 2
  3. 2
  4. 2
  5. 2
  6. 2
  7. 2
  8. 2
  9. 2
  10. 2
  11. 2
  12. 2
  13. 2
  14. 2
  15. 2
  16. 2
  17. 2
  18. 2
  19. 2
  20. 2
  21. 2
  22. 2
  23. 2
  24. 2
  25. 2
  26. 2
  27. 1
  28. 1
  29. 1
  30. 3
  31. 1
  32. 3
  33. 3
  34. 1
  35. 3
  36. 1
  37. 3
  38. 1
  39. 3
  40. 1
  41. 1
  42. 1
  43. 3
  44. 3
  45. 3
  46. 1
  47. 1
  48. 3
  49. 3
  50. 1
  51. 1
  52. 1
  53. 4
  54. 4
  55. 4
  56. 4
  57. 4
  58. 4
  59. 4
  60. 4
  61. 4
  62. 4
  63. 4
  64. 4
  65. 4
  66. 4
  67. 4
  68. 4
  69. 4
  70. 4
  71. 4
  72. 4
  73. 4
  74. 4
  75. 4
  76. 4
  77. 4
  78. 4
  79. 2
  80. 2
  81. 2
  82. 2
  83. 2
  84. 2
  85. 2
  86. 2
  87. 2
  88. 2
  89. 2
  90. 2
  91. 2
  92. 2
  93. 2
  94. 2
  95. 2
  96. 2
  97. 2
  98. 2
  99. 2
  100. 2
  101. 2
  102. 2
  103. 2
  104. 2

In [32]:
modelo$centers


xy
1-0.6624353 -0.09825517
2 0.9937956 0.15575292
3-0.4665211 -0.03672141
4 0.3367062 1.47904936

Agora, vamos plotar os grupos que o KMeans encontrou, com seus centros


In [36]:
plot(X,Y,col = modelo$cluster, pch = modelo$cluster)
points(somex,somey, pch = 8, col = 2, cex = 9)



In [ ]: