Question:
Prédire le cluster d'un nouvel objet avec kmeans dans R
user333
2011-07-04 19:32:46 UTC
view on stackexchange narkive permalink

J'ai utilisé mon ensemble de données d'entraînement pour ajuster le cluster à l'aide de la fonction kmenas

  fit <- kmeans (ca.data, 2);  

Comment puis-je utiliser un objet fit pour prédire l'appartenance au cluster dans un nouvel ensemble de données?

Merci

Quatre réponses:
#1
+16
Nick Sabbe
2011-07-04 19:54:23 UTC
view on stackexchange narkive permalink

L'une de vos options consiste à utiliser cl_predict du package clue (note: j'ai trouvé cela en recherchant sur Google "kmeans R predict").

Le lien n'a pas fonctionné pour moi, à la place j'ai utilisé ceci: https://www.rdocumentation.org/packages/clue/versions/0.3-57/topics/cl_predict
#2
+5
Pablo Casas
2015-12-29 23:54:57 UTC
view on stackexchange narkive permalink

Cochez cette réponse complète. Le code dont vous avez besoin est:

  clusters <- function (x, centers) {# calculer la distance euclidienne au carré de chaque échantillon à chaque centre de cluster tmp <- sapply (seq_len (nrow (x)), fonction (i) apply (centres, 1, fonction (v) sum ((x [i,] -v) ^ 2))) max.col ( -t (tmp)) # trouver l'index de la distance min} # créer un jeu de données simple avec deux clustersset.seed (1) x <- rbind (matrix (rnorm (100, sd = 0.3), ncol = 2), matrix ( rnorm (100, mean = 1, sd = 0.3), ncol = 2)) colnames (x) <- c ("x", "y") x_new <- rbind (matrix (rnorm (10, sd = 0.3), ncol = 2), matrix (rnorm (10, mean = 1, sd = 0.3), ncol = 2)) colnames (x_new) <- c ("x", "y") cl <- kmeans (x, centres = 2) all.equal (cl [["cluster"]], clusters (x, cl [["centers"]])) # [1] TRUEclusters (x_new, cl [["centers"]]) # [1] 2 2 2 2 2 1 1 1 1 1  
Cela fait un moment depuis ma réponse;maintenant, je recommande de créer un modèle prédictif (comme la forêt aléatoire), en utilisant la variable de cluster comme cible.J'ai obtenu de meilleurs résultats en pratique avec cette approche.Par exemple, dans le clustering, toutes les variables sont également importantes, tandis que le modèle prédictif peut choisir automatiquement celles qui maximisent la prédiction du cluster.Cette approche est également compatible avec le déploiement en production (c'est-à-dire prédire à quel cluster le cas appartient).
#3
+3
Augusto
2015-11-28 00:45:24 UTC
view on stackexchange narkive permalink

Une autre option consiste à utiliser la méthode prédire du package flexclust après avoir converti votre modèle stats :: kmeans en son type kcca .

#4
+1
Russ Hyde
2018-10-11 16:42:14 UTC
view on stackexchange narkive permalink

En tant que méthode S3 qui minimise la somme des carrés.Utilisé comme pour les autres fonctions predict (les nouvelles données doivent correspondre à la structure de votre entrée dans kmeans) et avec l'argument de méthode fonctionnant comme pour fitted.kmeans

  predict.kmeans <- fonction (objet,
                           nouvelles données,
                           method = c ("centres", "classes")) {
  méthode <- match.arg (méthode)

  centres <- objet $ centres
  ss_by_center <- apply (centres, 1, fonction (x) {
    colSums ((t (nouvelles données) - x) ^ 2)
  })
  best_clusters <- apply (ss_by_center, 1, which.min)

  if (méthode == "centres") {
    centres [best_clusters,]
  } autre {
    best_clusters
  }
}
 

J'aimerais qu'il y ait un predict.kmeans dans l'espace de noms stats existant.



Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...