0

J'ai un ensemble de données assez volumineux avec des données purement catégorielles. Le nombre de lignes (échantillons) de données est supérieur à 30 000 000. Les attributs ont été réduits à 4 (colonnes) et tous (attributs) sont catégoriques, l'un d'entre eux ayant presque 50 000 niveaux! J'essaie de regrouper mes données avant de poursuivre le traitement. Cependant, en raison de la grande taille des données, il n'est pas possible d'utiliser la plupart des algorithmes de clustering. J'ai choisi d'utiliser Clara_Medoids du package ClusterR pour essayer le clustering. Le problème auquel je suis confronté est que l'exécution du code me donne une erreur que je ne peux pas résoudre.Clara_Medoids avec un grand ensemble de données catégorielles avec plusieurs niveaux dans R

code:

Cmediods_5 <- ClusterR::Clara_Medoids(MyData, clusters = 5, samples = 3, sample_size = 0.0005, distance_metric = "simple_matching_coefficient") 

et ceci est l'erreur que je reçois:

Erreur dans check_NaN_Inf (données): Non compatible avec le type demandé: [type = caractère; target = double].

Je sens cette erreur est due au fait que j'utilise la distance métrique, mais je ne vois pas « simple_matching_coefficient » toute autre option viable que mes données sont purement catégorique. Est-il possible de contourner le problème de type de données pour que cet algorithme fonctionne correctement? Évidemment, je ne veux pas créer de variables fictives, car comme je l'ai expliqué plus tôt, l'un des attributs a environ 50 000 niveaux!

Les options pour les mesures de distance fonction Clara_Medoids sont: euclidienne, manhattan, Tchebychev, canberra, braycurtis, pearson_correlation, simple_matching_coefficient, Minkowski, Hamming, jaccard_coefficient, Rao_coefficient, Mahalanobis

Malheureusement, il n'a pas la distance de Gower sinon, ça aurait été mon choix.

+0

Travaillez avec un * échantillon * d'abord, puis augmentez la taille. Travailler avec des données de câlins juste pour savoir ce qui ne fonctionne pas est une perte de temps. –

Répondre

1

La vignette du package (http://mlampros.github.io/2016/09/12/clusterR_package/) en a un exemple.

En utilisant les mushroom données de la vignette d'une aide des variables de facteur tel qu'il est, les résultats dans la même erreur que vous avez:

library(ClusterR) 


cl_f = Clara_Medoids(mushroom[-1], clusters = 2, distance_metric = 'hamming', 
    samples = 5, sample_size = 0.2, swap_phase = TRUE, verbose = F, threads = 1) 

# Error in check_NaN_Inf(data) : 
# Not compatible with requested type: [type=character; target=double]. 

La vignette suggère d'utiliser la distance de Hamming (qui compte le nombre de non correspondant variables) et convertir les colonnes numériques:

dta <- as.data.frame(lapply(mushroom[-1], as.integer)) 

cl_f = Clara_Medoids(dta, clusters = 2, distance_metric = 'hamming', 
    samples = 5, sample_size = 0.2, swap_phase = TRUE, verbose = F, threads = 1) 

la vignette donne également un exemple en utilisant la distance de Gower, mais cela implique le calcul de la matrice de distance, ce qui est probablement pas une option avec votre ensemble de données.

+0

Merci @Jan van der Laan, c'est utile. Bien que je ne sois pas tout à fait certain que la mesure de dissimilarité de Hamming soit pertinente pour mes données, je vais essayer de voir si les groupes sont pertinents sur la base de cette mesure. – Ankhnesmerira

+0

Donc pensé à mettre à jour que j'ai essayé la distance de Hamming et le clustering ne semble pas trop pertinent malheureusement. – Ankhnesmerira

+0

@Ankhnesmerira C'est dommage. Comme l'a suggéré Anony-Mousse, essayez par exemple la distance de la tondeuse en utilisant un échantillon de vos données. Je soupçonne que cela n'aidera pas beaucoup. Vous avez seulement 4 variables catégoriques. La comparaison de deux enregistrements donnera quatre 0/1. Toute mesure de distance sera probablement juste une somme pondérée des 1. –

0

Je n'ai pas assez de réputation sinon j'aurais seulement ajouté un commentaire. À mon avis donner un échantillon de vos données aurait aidé à résoudre votre problème sans faire de suppositions. Comme @Jan van der Laan a mentionné que vos données doivent être de type numérique (requis pour la matrice de distance), ce qui n'est pas le cas, c'est pourquoi vous obtenez l'erreur.

Vous devez également savoir que le simple_matching_coefficient ne fonctionne que pour les données binaires.

Si vos données ne sont constituées que de variables catégorielles, la distance de Hamming est appropriée. La distance de gower fonctionne bien dans le cas où les données sont de type de données mixtes (numérique, facteur, etc.). Jetez un oeil également dans le gowdis function of the FD package ou dans le daisy function of the cluster package.

Dans la description du paquet, j'ai également ajouté un link au cas où quelqu'un rencontrerait un problème.