Técnicas de Agrupamiento y Clasificación: Aplicaciones y Ejemplos
Algoritmo K-medias
El algoritmo K-medias se utiliza mediante la función kmeans
. El parámetro nstart
indica el número de inicializaciones aleatorias del método.
clusters2.datos$cluster
: Para ver a qué clúster pertenece cada dato.clusters2.datos$withnss
: Variabilidad dentro de los grupos.
Para elegir el número óptimo de clústeres, hay que calcular la variabilidad dentro de los grupos para distintas ejecuciones de kmeans. Se genera un vector SSW con la suma de las varianzas dentro de los grupos, obtenida después de cada ejecución del método, y se representa gráficamente:
SSW <- vector(mode="numeric", length=15)
# Inicializamos el vector.
SSW[1] <- (n-1) * sum(apply(datos.st, 2, var))
# Variabilidad de todos los datos (todos los datos son un único clúster).
for (i in 2:25) SSW[i] = sum(kmeans(datos.st, centers=i, nstart=25)$withnss)
# Variabilidad de cada modelo, desde 2 hasta 15 clústeres.
centroides = aggregate(datos.st, by=list(clusters4.datos$clusters), FUN=mean)
# Calcular los centroides de cada clúster.
t(centroides)
# Vemos los centroides.
table(wine, centroides$clusters)
# Matriz de confusión.
Métodos Jerárquicos
Se calculan con la función hclust
.
d <- dist(datos, method="euclidean")
# Matriz de distancias de los datos.
fit <- hclust(d, method="ward.D2")
# Clúster con el método Ward.
plot(fit, labels=rownames(datos), cex=0.7)
# Dendrograma.
En la orden plot
, el parámetro labels
es un vector con las etiquetas de las hojas del árbol.
groups <- cutree(fit, k=4)
# Fijamos el número de clústeres.
rect.hclust(fit, k=4, border="red")
# Recuadramos los clústeres.
Escalado Multidimensional (MDS)
La función cmdscale()
permite implementar el MDS. Los vectores x
e y
contienen las coordenadas de cada dato, reconstruido a partir de la matriz de distancias. El parámetro k
es el máximo número de dimensiones que se emplearán. La opción eig=TRUE
indica que queremos que el output contenga los autovectores.
fit <- cmdscale(dist.au, eig=TRUE, k=2)
x <- fit$points[, 1]
y <- fit$points[, 2]
plot(x, y)
# Para visualizar los resultados.
El paquete igraph
permite representar la solución del MDS en un grafo:
g <- graph.full(nrow(dist.au))
V(g)$label <- rownames(dist.au)
layout <- layout.mds(g, dist=as.matrix(dist.au))
plot(g, layout=layout, vertex.size=3)
Análisis Discriminante
Se quiere predecir la clase de un grupo de datos a partir de un conjunto de variables predictivas. La variable respuesta (clase) es siempre categórica. El análisis discriminante lineal construye una o más ecuaciones discriminantes (combinaciones lineales de las variables predictoras) de manera que los posibles grupos difieran lo más posible en D. Los pesos de la función discriminante se calculan de manera que el cociente (suma de cuadrados entre grupos) / (suma de cuadrados dentro de los grupos) sea lo mayor posible. El número de funciones discriminantes es igual al mínimo entre el número de grupos menos 1 y el número de variables predictoras (p). Se comienza con un análisis exploratorio descriptivo y luego un análisis discriminante. ¿Varían los predictores suficientemente sobre los grupos? Si no, son malos predictores. Test formal: Wilks. Se miran los coeficientes de las funciones discriminantes estandarizadas para saber qué predictores juegan un papel relevante. Los coeficientes representan correlaciones parciales. El eigenvalue da la varianza explicada en la variable de clase por los predictores en una función discriminante. Se mira este cociente para establecer la importancia relativa de una función discriminante. SVD: los valores singulares dan el cociente entre las desviaciones estándar entre y dentro de los grupos sobre las variables discriminantes lineales. Traza: el primer número indica el porcentaje de la varianza entre grupos que es capaz de explicar la primera función discriminante. Usando el modelo discriminante estimado se clasifican nuevos datos: se calcula la probabilidad de que un individuo pertenezca a un grupo usando el modelo discriminante, se hace esto para cada grupo y para clasificar se utiliza la regla de Bayes.
Reglas de Asociación
Se utilizan para descubrir hechos que ocurren en común dentro de un determinado conjunto de datos. Los comandos habituales son apriori()
y eclat()
del paquete arules
. Para visualizar estas reglas se usa el paquete arulesViz
.
rules <- apriori(titanic.raw)
# Creamos las reglas con el algoritmo Apriori.
inspect(rules)
rules <- apriori(titanic.raw, parameter = list(minlen=2, supp=0.005, conf=0.8), appearance = list(rhs=c("Survived=No", "Survived=Yes"), default="lhs"), control = list(verbose=FALSE))
# Visualizamos las reglas que expliquen una determinada condición.
rules.sorted <- sort(rules, by="confidence")
inspect(rules.sorted)
Para podar, hay que buscar las reglas redundantes:
subset.matrix <- is.subset(rules.sorted, rules.sorted)
subset.matrix[lower.tri(subset.matrix, diag=TRUE)] <- NA
redundant <- colSums(subset.matrix, na.rm=TRUE) >= 1
which(redundant)
rules.pruned <- rules.sorted[!redundant]
# Eliminamos las reglas redundantes.