Agrupación de datos mixtos (numéricos y categóricos) en R

El principal problema de todos los algoritmos clásicos para el análisis de datos es su escasa aplicabilidad a problemas prácticos. Esto también se aplica a las tareas de agrupación en clústeres.





En problemas reales (y también científicos), se hace necesario agrupar datos de tipo mixto, por ejemplo, cuando la mitad de las variables son numéricas y la mitad de las variables son categóricas.





Por separado, estas tareas se resuelven de manera estándar (por ejemplo, un artículo sobre agrupación jerárquica de datos puramente categóricos - https://habr.com/ru/company/otus/blog/461741/ ), sin embargo, se resuelve el problema de agrupación Los datos mixtos presentan algunas dificultades, asociadas principalmente con la complejidad de calcular la distancia entre observaciones.





Un momento de teoría

Los métodos existentes asumen el cálculo de la distancia para Gower usando la función daisy (daisy (method = "gower")) en el paquete de clúster.





Sin embargo, según los creadores del paquete clustMixType , este método es inaplicable cuando se procesan grandes cantidades de datos y se implementa un método diferente en su paquete.





Los fundamentos teóricos del método de agrupamiento implementado se desarrollaron en 1999 en el trabajo de Z. Huang. Extensiones del algoritmo k-means para agrupar grandes conjuntos de datos con variables categóricas. Minería de datos y descubrimiento de conocimientos, 2: 283-304, 1998. doi: 10.1023 / A: 1009769707641. Se llama método k-prototypes y se basa en la siguiente fórmula de distancia:





Dónde





De hecho, la distancia se calcula combinando la suma de cuadrados de la diferencia de variables numéricas y la suma del número de clases no coincidentes en variables categóricas, multiplicado por algún parámetro γ.





Por lo tanto, para la aplicación exitosa de este método, se requieren dos parámetros externos: k (el número de conglomerados) y γ (la importancia de las variables categóricas; si γ = 0, entonces la distancia se reduce a la distancia euclidiana clásica)





Volver a la práctica





, (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 – - ). :





Artículo original de los desarrolladores del paquete clustMixType: https://journal.r-project.org/archive/2018/RJ-2018-048/RJ-2018-048.pdf








All Articles