Regroupement de données mixtes (numériques et catégorielles) dans R

Le problème principal de tous les algorithmes classiques d'analyse de données est leur faible applicabilité à des problèmes pratiques. Cela s'applique également aux tâches de clustering.





Dans la réalité (et aussi dans les problèmes scientifiques), il devient nécessaire de regrouper les données de type mixte - par exemple, lorsque la moitié des variables sont numériques et la moitié des variables sont catégoriques.





Séparément, ces tâches sont résolues de manière standard (par exemple, un article sur le clustering hiérarchique de données purement catégoriques - https://habr.com/ru/company/otus/blog/461741/ ), résolvant cependant le problème du clustering les données mixtes présentent certaines difficultés, liées principalement à la complexité du calcul de la distance entre les observations.





Un moment de théorie

Les méthodes existantes supposent le calcul de la distance pour Gower en utilisant la fonction daisy (daisy (method = "gower")) dans le package de cluster.





Cependant, selon les créateurs du package clustMixType , cette méthode est inapplicable lors du traitement de grandes quantités de données, et une méthode différente est implémentée dans leur package.





Les fondements théoriques de la méthode de clustering mise en œuvre ont été développés en 1999 dans les travaux de Z. Huang. Extensions de l'algorithme k-means pour le clustering de grands ensembles de données avec des variables catégorielles. Exploration de données et découverte des connaissances, 2: 283-304, 1998. doi: 10.1023 / A: 1009769707641. Elle s'appelle la méthode des k-prototypes et est basée sur la formule de distance suivante:









En fait, la distance est calculée en combinant la somme des carrés de la différence des variables numériques et la somme du nombre de classes non concordantes dans les variables catégorielles, multipliée par un paramètre γ.





Ainsi, pour l'application réussie de cette méthode, deux paramètres externes sont nécessaires: k (le nombre de clusters) et γ (l'importance des variables catégorielles; si γ = 0, alors la distance est réduite à la distance euclidienne classique)





Retour à la pratique





, (CollegeDistance AER). , :





score ( : )





fcollege ( : )





mcollege ( : )





urban ( : )





education ( : )





income ( : 25 000 ?)





# 
library(tibble)
library(clustMixType)
library(AER)
data("CollegeDistance")
glimpse(CollegeDistance)
XX<-CollegeDistance[,c(3,4,5,7,10,12,13)] #  
      
      







clus_2<-kproto(XX, k = 2) # k -  
      
      



RStudio :





, , 0 , γ 84.15475 ( ). clus_2 :





clus_2$cluster  #  ,    
clus_2$centers  # 
      
      



, , –





clus_2$size #  
      
      



:





library(wesanderson)
par(mfrow=c(4,2))
clprofiles(clus_2, XX, col = wes_palette("Royal1", 2, type = "continuous"))
      
      



, :





-





-





-





- .









table(XX$income, clus_2$cluster)
      
      



, 482 1790 , – 883 1584 .





– γ ( γ ). lambdaest





lambdaest(XX, num.method = 1, fac.method = 1, outtype = "vector")
      
      



– γ





– γ





Es <- numeric(10)
for(i in 1:10){
  kpres <- kproto(XX,lambda = c(0.01320599,3.03450559,4.21940823,2.79814318,0.18950893,0.31241193,2.43817959), k = i )
  Es[i] <- kpres$tot.withinss
}
plot(1:10, Es, type = "b", ylab = "Objective Function", xlab = "# Clusters",
     main = "Scree Plot")
      
      



, – 4 ( ; 6 9 – - ). :





Article original des développeurs du package clustMixType: https://journal.r-project.org/archive/2018/RJ-2018-048/RJ-2018-048.pdf








All Articles