Domanda:
Previsione dell'ammasso di un nuovo oggetto con kmeans in R
user333
2011-07-04 19:32:46 UTC
view on stackexchange narkive permalink

Ho utilizzato il mio set di dati di addestramento per adattare il cluster utilizzando la funzione kmenas

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

Come posso utilizzare l'oggetto fit per prevedere l'appartenenza al cluster in un nuovo set di dati?

Grazie

Quattro risposte:
#1
+16
Nick Sabbe
2011-07-04 19:54:23 UTC
view on stackexchange narkive permalink

Una delle tue opzioni è utilizzare cl_predict dal pacchetto clue (nota: l'ho trovato tramite Google "kmeans R Predict").

Il collegamento non ha funzionato per me, invece ho usato questo: 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

Controlla questa risposta completa. Il codice che ti serve è:

  cluster Funzione < (x, centri) {# calcola la distanza euclidea al quadrato da ogni campione a ogni centro del cluster tmp <- sapply (seq_len (nrow (x)), function (i) apply (center, 1, function (v) sum ((x [i,] -v) ^ 2))) max.col ( -t (tmp)) # trova indice della distanza minima} # crea un semplice set di dati con due cluster.seed (1) x <- rbind (matrice (rnorm (100, sd = 0.3), ncol = 2), matrice ( 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), matrice (rnorm (10, mean = 1, sd = 0.3), ncol = 2)) colnames (x_new) <- c ("x", "y") cl <- kmeans (x, center = 2) all.equal (cl [["cluster"]], clusters (x, cl [["center"]])) # [1] TRUEclusters (x_new, cl [["center"]]) # [1] 2 2 2 2 2 1 1 1 1 1  
È passato un po 'di tempo dalla mia risposta;ora consiglio di costruire un modello predittivo (come la foresta casuale), utilizzando la variabile cluster come obiettivo.Ho ottenuto risultati migliori in pratica con questo approccio.Ad esempio, nel clustering tutte le variabili sono ugualmente importanti, mentre il modello predittivo può scegliere automaticamente quelle che massimizzano la previsione del cluster.Questo approccio è anche compatibile con la distribuzione in produzione (ovvero la previsione a quale cluster appartiene il caso).
#3
+3
Augusto
2015-11-28 00:45:24 UTC
view on stackexchange narkive permalink

Un'altra opzione è utilizzare il metodo di previsione dal pacchetto flexclust dopo aver convertito il tuo modello stats :: kmeans nel suo tipo kcca .

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

Come metodo S3 che riduce al minimo la somma dei quadrati.Usato come per altre funzioni prediction (i nuovi dati dovrebbero corrispondere alla struttura del tuo input a kmeans) e con l'argomento del metodo che funziona come per fitted.kmeans

  prediction.kmeans <- funzione (oggetto,
                           nuovi dati,
                           metodo = c ("centri", "classi")) {
  metodo <- match.arg (metodo)

  centri <- oggetto $ centri
  ss_by_center <- apply (centri, 1, funzione (x) {
    colSum ((t (nuovi dati) - x) ^ 2)
  })
  best_clusters <- applica (ss_by_center, 1, which.min)

  if (metodo == "centri") {
    centri [best_clusters,]
  } altro {
    best_clusters
  }
}
 

Vorrei che ci fosse un prediction.kmeans nello spazio dei nomi stats esistente.



Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...