2017-07-05 2 views
0

J'ai un ensemble d'échantillons d'observations comme suitComment effectuer un regroupement/groupement sur des variables catégorielles basées sur des fréquences?

var1 var2 var3 var4 
1 2 1  1 
3 2 1  3 
1 2 0  1 
3 2 2  3 

Toutes les valeurs sont catégoriques dans la nature. Je veux regrouper les première et troisième rangées dans une grappe et les deuxième et quatrième dans une autre grappe. Je crois que l'encodage à chaud n'est pas efficace dans ce cas parce que les variables catégoriques ne possèdent aucun rang et sont purement nominales.

(Les lignes ne doivent pas nécessairement être absolument identiques). Existe-t-il un algorithme mathématique prédéfini pour regrouper ces rangées en fonction des similitudes/fréquences? Quelqu'un peut-il suggérer un bon moyen de le faire? Ou devrais-je aller avec un codage à chaud?

+0

De plus, le regroupement sur une donnée catégorique peut être effectué en utilisant les distances de gower dans la partition autour de l'algorithme de medoids, si je ne me trompe pas. –

Répondre

1

Vous pouvez utiliser la distance de la table pour calculer la distance entre les variables catégorielles.

ci-dessous un exemple:

# Import data 
dta <- read.table(header = TRUE, textConnection("Var1 var2 var3 var4 
1 2 1  1 
3 2 1  3 
1 2 0  1 
3 2 2  3")) 
dta <- as.data.frame(lapply(dta, as.factor)) 


# Create distance matrix using gower distance using gower package (fast) 
# The code below computes the complete distance matrix, while only the upper 
# or lower half is needed; so this could be improved. 
library(gower) 
pairs <- expand.grid(x = seq_len(nrow(dta)), y = seq_len(nrow(dta))) 
dist <- gower_dist(dta[pairs$x,], dta[pairs$y, ]) 
dist <- array(dist, dim = c(nrow(dta), nrow(dta))) 

# Convert matrix to distance object 
dist <- as.dist(dist) 

# Cluster using distance matrix; for this there are numerous options 
# Use hierarchical clustering in this case 
cl <- hclust(dist) 
plot(cl) 

Une autre solution utilisant le paquet de cluster (als contient un grand nombre de méthodes de classification)

library(cluster) 
dist <- daisy(dta, metric = "gower") 

cl <- hclust(dist) 
plot(cl) 

Afin de tirer le regroupement de la classification hiérarchique, l'arbre doit être «coupé» dans les grappes. Cela peut être fait en spécifiant la hauteur à laquelle l'arbre doit être coupé, ou en spécifiant le nombre de clusters. Ci-dessous, je spécifie le nombre de clusters:

dta$cluster <- cutree(cl, k = 2) 
+0

Je suis novice dans cette approche. S'il vous plaît excusez-moi si je pose une mauvaise question? Alors, est-il possible d'ajouter le nom de cluster respectif à chacune des lignes? Pouvez-vous montrer comment? –

+0

@EdwinVarghese Ajout d'un exemple, mais vous devriez lire ces méthodes si vous voulez les utiliser. Par exemple, commencez par le chapitre 10 de l'introduction à l'apprentissage statistique: http://www-bcf.usc.edu/~gareth/ISL/ISLR%20Seventh%20Printing.pdf. –