You are on page 1of 156

Técnicas de segmentación y clasificación de datos

Diplomado en Estadística y Análisis de Datos

Contraloría General de la República

08 Febrero 2018


Sebastián Moreno

Universidad Adolfo Ibañez
Reducción de dimensionalidad
Reducción de dimensionalidad, métodos
• Análisis de componentes principales (Principal Component
Analysis)

Es una transformación lineal que permite explicar la mayor parte de la
varianza en las primeras dimensiones.

• Análisis de factores

Combinación lineal de un pequeño número de variables latentes.

• Escalamiento multidimensional

Proyecta los datos a un número menor de dimensiones mientras se
mantienen las distancias entre los puntos.
Reducción de dimensionalidad, PCA
• PCA es una transformación lineal, donde las nuevas variables no
tienen correlación entre sí (la covarianza entre cualquier variable es
cero) y las variables están ordenadas según el porcentaje de varianza
explicada.

Datos originales Después de aplicar PCA


Reducción de dimensionalidad, PCA, paso a paso
Reducción de dimensionalidad, PCA, paso a paso

Centrar datos
Reducción de dimensionalidad, PCA, paso a paso

Centrar datos

s d e
 ct o re o s
0.950 rv e p e s
u l a n y
Calc ormació
↵1 =
0.312
r an sf
t

-0.312
↵2 =
0.950
↵ = [1.460, 0.1728]
Reducción de dimensionalidad, PCA, paso a paso

Centrar datos

s d e
 ct o re o s
0.950 rv e p e s
u l a n y
Calc ormació
↵1 =
0.312
r an sf
t

↵2 =
-0.312 Transformar los datos
0.950
↵ = [1.460, 0.1728]
Reducción de dimensionalidad, PCA, flor de iris

• Largo y ancho del pétalo, largo y ancho del sépalo


Métodos jerárquicos aglomerativos, código en R
• #mostrando los datos IRIS

iris 


Sepal.Length Sepal.Width Petal.Length Petal.Width Species

1 5.1 3.5 1.4 0.2 setosa

2 4.9 3.0 1.4 0.2 setosa

3 4.7 3.2 1.3 0.2 setosa

4 4.6 3.1 1.5 0.2 setosa

…

150 5.9 3.0 5.1 1.8 virginica
Métodos jerárquicos aglomerativos, código en R
• #Visualicemos los datos IRIS

library(ggplot2)

ggplot(iris, aes(Petal.Length, Petal.Width))+ geom_point()
+theme(axis.text=element_text(size=12),axis.title=element_text(size=18))

• ggplot(iris, aes(Sepal.Length, Sepal.Width))+ geom_point()


+theme(axis.text=element_text(size=12),axis.title=element_text(size=18))
Reducción de dimensionalidad, PCA, ejemplo
• Ejemplo datos flor de iris
sepal sepal petal petal
original
length width length width
% Varianza 15% 4% 68% 13%
Varianza 0.6857 0.1900 3.1163 0.5810
Reducción de dimensionalidad, PCA, ejemplo
• Ejemplo datos flor de iris
sepal sepal petal petal
original
length width length width
% Varianza 15% 4% 68% 13%
Varianza 0.6857 0.1900 3.1163 0.5810

Transfor
 1er 2do 3er 4to


mación
% Varianza 92% 5% 2% 1%

Peso 4.2282 0.2427 0.0782 0.0238


Reducción de dimensionalidad, PCA, ejemplo
• Ejemplo datos flor de iris
sepal sepal petal petal
original
length width length width
% Varianza 15% 4% 68% 13%
Varianza 0.6857 0.1900 3.1163 0.5810

Transfor
 1er 2do 3er 4to


mación
% Varianza 92% 5% 2% 1%

Peso 4.2282 0.2427 0.0782 0.0238


Reducción de dimensionalidad, PCA, ejemplo
• Ejemplo datos flor de iris
sepal sepal petal petal vector 1er 2do 3er 4to
original
length width length width
% Varianza 15% 4% 68% 13% sepal
0.36 0.65 -0.58 0.31
length
Varianza 0.6857 0.1900 3.1163 0.5810
sepal
-0.08 0.73 0.60 -0.32
width
Transfor
 1er 2do 3er 4to
mación petal
0.86 -0.17 0.08 -0.48
% Varianza 92% 5% 2% 1% length
petal
Peso 4.2282 0.2427 0.0782 0.0238 0.36 -0.08 0.55 0.75
width
Reducción de dimensionalidad, PCA,
estandarización
• Ejemplo, datos de vino: 13 atributos, 3 tipos de vinos

% Varianza proline magnesium


original 99% 0.2%
Reducción de dimensionalidad, PCA,
estandarización
• Ejemplo, datos de vino: 13 atributos, 3 tipos de vinos
Peso 1st 2nd
% Varianza proline magnesium
magnesium 0.9998 -0.0178
original 99% 0.2%
proline 0.0179 0.9993
Reducción de dimensionalidad, PCA,
estandarización
• Ejemplo, datos de vino: 13 atributos, 3 tipos de vinos

% Varianza proline magnesium • PCA encontró que las dos


original 99% 0.2% primeras componentes
corresponden a proline y
magnesium (explican el 99% y
0.2% de la varianza debido a
la escala de los datos).

• Estandarización de cada
variable a varianza 1,
transforma la covarianza a la
correlación entre variables.
Reducción de dimensionalidad, PCA,
estandarización
• Ejemplo, datos de vino: 13 atributos, 3 tipos de vinos

% Varianza proline magnesium % Varianza 1er 2do 3er 4to … 13vo


original 99% 0.2% Transformado 36% 19% 11% 7% … 0.1%
Reducción de dimensionalidad, PCA, seleccionando
variables
• Ejemplo, datos de vino: 13 atributos, 3 tipos de vinos

• Graficando el % de varianza
explicado por cada
componente y la suma
acumulada de las varianzas,
nos permite determinar el
número de componentes
(variables) a determinar.
Reducción de dimensionalidad, PCA, código en R
• #Aplicando PCA

XPCA=prcomp(iris[,1:4])

XPCA


Standard deviations (1, .., p=4):

[1] 2.0562689 0.4926162 0.2796596 0.1543862


Rotation (n x k) = (4 x 4):

PC1 PC2 PC3 PC4

Sepal.Length 0.36138659 -0.65658877 0.58202985 0.3154872

Sepal.Width -0.08452251 -0.73016143 -0.59791083 -0.3197231

Petal.Length 0.85667061 0.17337266 -0.07623608 -0.4798390

Petal.Width 0.35828920 0.07548102 -0.54583143 0.7536574
Reducción de dimensionalidad, PCA, código en R
• #Aplicando PCA

XPCA=prcomp(iris[,1:4])

XPCA


Standard deviations (1, .., p=4):

[1] 2.0562689 0.4926162 0.2796596 0.1543862


Rotation (n x k) = (4 x 4):

PC1 PC2 PC3 PC4

Sepal.Length 0.36138659 -0.65658877 0.58202985 0.3154872

Sepal.Width -0.08452251 -0.73016143 -0.59791083 -0.3197231

Petal.Length 0.85667061 0.17337266 -0.07623608 -0.4798390

Petal.Width 0.35828920 0.07548102 -0.54583143 0.7536574

• #Tambien es posible especificar si se centran y escalan los datos



XPCA=prcomp(iris[,1:4], center = TRUE, scale. = FALSE) #default
Reducción de dimensionalidad, PCA, código en R
• XPCA$x #Obtener los datos transformados

PC1 PC2 PC3 PC4

[1,] -2.684125626 -0.319397247 0.027914828 0.0022624371

[2,] -2.714141687 0.177001225 0.210464272 0.0990265503

…

[150,] 1.390188862 0.282660938 -0.362909648 -0.1550386282
Reducción de dimensionalidad, PCA, código en R
• XPCA$x #Obtener los datos transformados

PC1 PC2 PC3 PC4

[1,] -2.684125626 -0.319397247 0.027914828 0.0022624371

[2,] -2.714141687 0.177001225 0.210464272 0.0990265503

…

[150,] 1.390188862 0.282660938 -0.362909648 -0.1550386282

• XPCA$rotation #Vectores de transformación



PC1 PC2 PC3 PC4

Sepal.Length 0.36138659 -0.65658877 0.58202985 0.3154872

Sepal.Width -0.08452251 -0.73016143 -0.59791083 -0.3197231

Petal.Length 0.85667061 0.17337266 -0.07623608 -0.4798390

Petal.Width 0.35828920 0.07548102 -0.54583143 0.7536574
Reducción de dimensionalidad, PCA, código en R
• XPCA$x #Obtener los datos transformados

PC1 PC2 PC3 PC4

[1,] -2.684125626 -0.319397247 0.027914828 0.0022624371

[2,] -2.714141687 0.177001225 0.210464272 0.0990265503

…

[150,] 1.390188862 0.282660938 -0.362909648 -0.1550386282

• XPCA$rotation #Vectores de transformación



PC1 PC2 PC3 PC4

Sepal.Length 0.36138659 -0.65658877 0.58202985 0.3154872

Sepal.Width -0.08452251 -0.73016143 -0.59791083 -0.3197231

Petal.Length 0.85667061 0.17337266 -0.07623608 -0.4798390

Petal.Width 0.35828920 0.07548102 -0.54583143 0.7536574

• XPCA$sdev #Raiz cuadrada de los pesos



2.0562689 0.4926162 0.2796596 0.1543862
Reducción de dimensionalidad, PCA, código en R
• #Instalando librería para graficar y ver los porcentajes de varianza explicada

install.packages("factoextra")

library(factoextra)

• #obteniendo los porcentajes de varianza explicada



get_eig(XPCA)


eigenvalue variance.percent cumulative.variance.percent

Dim.1 4.22824171 92.4618723 92.46187

Dim.2 0.24267075 5.3066483 97.76852

Dim.3 0.07820950 1.7102610 99.47878

Dim.4 0.02383509 0.5212184 100.00000
Reducción de dimensionalidad, PCA, código en R
• #Graficando los porcentajes de varianza

fviz_eig(XPCA , addlabels = TRUE)

Segmentación de datos

Clustering

Métodos jerárquicos
Contenidos
• Introducción

• Segmentación de datos

• Búsqueda de Patrones

• Clustering

• Introducción

• Métodos de partición

• Métodos de densidad

• Métodos jerárquicos

• Métodos difusos

• Evaluación
Métodos jerárquicos, introducción

• Los métodos jerárquicos pueden ser aglomerativos o divisivos, en ambos


casos un dendrograma es generado mostrando la secuencia de uniones o
divisiones de los clusters.

Aglomerativo Divisivo
Métodos jerárquicos, dendrograma
• Un dendrograma es un diagrama del tipo árbol que ilustra el proceso de
generación de clusters producido por los algoritmos jerárquicos. Mientras uno
de los ejes muestra los puntos originales, el otro eje, puede mostrar la
distancia existente entre los clusters.
7 6
5 4
3 2 1
0
Métodos jerárquicos aglomerativos, introducción
• Método Jerárquico Divisivo: Comienza con todos los puntos como un solo
cluster. Luego, en cada etapa, se selecciona un cluster y se separa en dos
clusters. Este proceso se repite hasta que cada cluster tiene un punto.
Métodos jerárquicos aglomerativos, introducción
• Método Jerárquico Aglomerativo (MJA): Comienza con todos los puntos como
clusters individuales. Luego, en cada etapa, se unen los cluster más cercanos
entre si. Este proceso se repite hasta que se genera un solo gran cluster.
Métodos jerárquicos aglomerativos, algoritmo
• El algoritmo más básico del MJA es bastante sencillo

Sea cada punto un cluster

Calcula la matriz de proximidad/distancia entre cada cluster

Repetir

Unir los cluster más cercanos

Recalcular/updatear la matriz de proximidad/distancia

Hasta que exista un solo cluster

• Lo más importante de este proceso es el cálculo de la matriz de


proximidad/distancia entre clusters

• Distintos enfoques de distancia entre clusters, segmentan los datos en


forma distinta.
Métodos jerárquicos aglomerativos, ejemplo
• Comencemos con cada punto siendo un cluster y se calcula la matriz de
proximidad.
p1 p2 p3 p4 p5 ...
p1

p2
p3

p4
p5

⋮ Matriz de Proximidad

...
p1 p2 p3 p4 p9 p10 p11 p12
Métodos jerárquicos aglomerativos, ejemplo
• Después de unir ciertos clusters, obtenemos

C1 C2 C3 C4 C5
C1 0.0 0.5 0.6 1.3 1.2
C2 0.0 1.1 1.2 0.4
C3 0.0 0.7 1,1
C4 0.0 0.9
C3 C5 0.0
C4 Matriz de Proximidad

C1

C2 C5
...
p1 p2 p3 p4 p9 p10 p11 p12
Métodos jerárquicos aglomerativos, ejemplo
• Después de unir ciertos clusters, obtenemos

• Buscamos los clusters más cercano


C1 C2 C3 C4 C5
C1 0.0 0.5 0.6 1.3 1.2
C2 0.0 1.1 1.2 0.4
C3 0.0 0.7 1,1
C4 0.0 0.9
C3 C5 0.0
C4 Matriz de Proximidad

C1

C2 C5
...
p1 p2 p3 p4 p9 p10 p11 p12
Métodos jerárquicos aglomerativos, ejemplo
• Después de unir ciertos clusters, obtenemos

• Buscamos los clusters más cercano

• Unimos los clusters más cercano C1 C2/C5 C3 C4


C1 0.0 ?? 0.6 1.3
C2/C5 0.0 ?? ??
C3 0.0 0.7
C3 C4 0.0
C4 Matriz de Proximidad

C1

C2 C5
...
p1 p2 p3 p4 p9 p10 p11 p12
Métodos jerárquicos aglomerativos, ejemplo
• Después de unir ciertos clusters, obtenemos

• Buscamos los clusters más cercano

• Unimos los clusters más cercano C1 C2/C5 C3 C4


C1 0.0 ?? 0.6 1.3
• Actualizar la matriz de proximidad
C2/C5 0.0 ?? ??
C3 0.0 0.7
C3 C4 0.0
C4 Matriz de Proximidad

C1

C2 C5
...
p1 p2 p3 p4 p9 p10 p11 p12
¿Cómo podemos actualizar
Métodos jerárquicos aglomerativos, ejemplo la
distancia entre clusters?
• Después de unir ciertos clusters, obtenemos

• Buscamos los clusters más cercano

• Unimos los clusters más cercano C1 C2/C5 C3 C4


C1 0.0 ?? 0.6 1.3
• Actualizar la matriz de proximidad
C2/C5 0.0 ?? ??
C3 0.0 0.7
C3 C4 0.0
C4 Matriz de Proximidad

C1

C2 C5
...
p1 p2 p3 p4 p9 p10 p11 p12
Métodos jerárquicos aglomerativos, single linkage

• Single linkage: La distancia entre


clusters esta determinada por los
puntos más similares (cercanos) entre
los clusters.

D(Ci , Cj ) = min{d(x, y)|x 2 Ci , y 2 Cj }


Métodos jerárquicos aglomerativos, single linkage

• Single linkage: La distancia entre


clusters esta determinada por los
puntos más similares (cercanos) entre
los clusters.

D(Ci , Cj ) = min{d(x, y)|x 2 Ci , y 2 Cj }

• Ventaja:

Genera cluster largos y delgados

• Limitación:

Afectado por los datos atípicos
Métodos jerárquicos aglomerativos, complete
linkage

• Complete linkage: La distancia entre


clusters esta determinada por los
puntos más disimiles (lejanos) entre los
clusters.

D(Ci , Cj ) = max{d(x, y)|x 2 Ci , y 2 Cj }


Métodos jerárquicos aglomerativos, complete
linkage

• Complete linkage: La distancia entre


clusters esta determinada por los
puntos más disimiles (lejanos) entre los
clusters.

D(Ci , Cj ) = max{d(x, y)|x 2 Ci , y 2 Cj }

• Ventaja:

Menos susceptible a datos atípicos

• Limitación:

-Tiende a quebrar cluster grandes

-Sesgado a generar clusters circulares
Métodos jerárquicos aglomerativos, average linkage

• Average linkage: La distancia entre


clusters esta determinada por la
distancia promedio entre todos los
puntos de los clusters.

D(Ci , Cj ) = avg{d(x, y)|x 2 Ci , y 2 Cj }

• Acuerdo de compromiso entre Single y Complete Linkage

• Ventaja:

Menos susceptible a datos atípicos

• Limitación:

Sesgado a generar clusters circulares
Métodos jerárquicos aglomerativos, ejemplos
1 0.2

5 0.15

2
0.1
3 6
0.05

4 0
3 6 2 5 4 1

Datos originales Single linkage


Métodos jerárquicos aglomerativos, ejemplos
1 0.2

5 0.15

2
0.1
3 6
0.05

4 0
3 6 2 5 4 1

Datos originales Single linkage


0.4

0.35

0.3

0.25

0.2

0.15

0.1

0.05

0
3 6 4 1 2 5

Complete linkage
Métodos jerárquicos aglomerativos, ejemplos
1 0.2

5 0.15

2
0.1
3 6
0.05

4 0
3 6 2 5 4 1

Datos originales Single linkage


0.4
0.25
0.35

0.3 0.2
0.25
0.15
0.2

0.15 0.1
0.1
0.05
0.05

0 0
3 6 4 1 2 5 3 6 4 1 2 5

Complete linkage Average linkage


Métodos jerárquicos aglomerativos, determinando el
número de clusters
• A pesar de que el dendrograma muestra toda la información de los
clusters generados, existen tantos posibles cluster como uniones posibles
(el número de datos existentes)

• Como regla básica, los posibles clusters se determinan por uniones de


clusters distantes entre ellas.

0.4
1 0.35

0.3

5 0.25
2 0.2

3 6 0.15

0.1

4
0.05

0
3 6 4 1 2 5

Original data Complete linkage


Métodos jerárquicos aglomerativos, determinando el
número de clusters
• A pesar de que el dendrograma muestra toda la información de los
clusters generados, existen tantos posibles cluster como uniones posibles
(el número de datos existentes)

• Como regla básica, los posibles clusters se determinan por uniones de


clusters distantes entre ellas.

0.4
1 0.35

0.3

5 0.25
2 0.2

3 6 0.15

0.1

4
0.05

0
3 6 4 1 2 5

Original data Complete linkage


Métodos jerárquicos aglomerativos, determinando el
número de clusters
• A pesar de que el dendrograma muestra toda la información de los
clusters generados, existen tantos posibles cluster como uniones posibles
(el número de datos existentes)

• Como regla básica, los posibles clusters se determinan por uniones de


clusters distantes entre ellas.

0.4
1 0.35

0.3

5 0.25
2 0.2

3 6 0.15

0.1

4
0.05

0
3 6 4 1 2 5

Original data Complete linkage


Métodos jerárquicos aglomerativos, determinando el
número de clusters
• A pesar de que el dendrograma muestra toda la información de los
clusters generados, existen tantos posibles cluster como uniones posibles
(el número de datos existentes)

• Como regla básica, los posibles clusters se determinan por uniones de


clusters distantes entre ellas.

0.4
1 0.35

0.3

5 0.25
2 0.2

3 6 0.15

0.1

4
0.05

0
3 6 4 1 2 5

Original data Complete linkage


Métodos jerárquicos aglomerativos, código en R
• #Apliquemos un algoritmo jerárquico

#Primero tenemos que calcular la matriz de distancia entre los puntos

d = dist(iris[,1:4]) #en forma equivalente d = dist(iris[,1:4],“euclidean”)

#Luego aplicamos el modelo 


model = hclust(d, method=“single”) 

#otros tipos de distancia entre clusters: “complete”, “average”


model 

Call:

hclust(d = d, method = "single")

Cluster method : single

Distance : euclidean

Number of objects: 150
Métodos jerárquicos aglomerativos, código en R
• #Graficando el dendrograma

plot(model, main="Dendrograma", xlab="puntos",
ylab="distancia",cex.lab=1.5,cex.main=1.5,cex.axis=1.3)


Métodos jerárquicos aglomerativos, código en R
• #Generando dos clusters

groups <- cutree(model, k=2)

#visualizando los cluster generados

library(ggplot2)

ggplot(iris, aes(Petal.Length, Petal.Width, color = groups)) + geom_point() +
theme(axis.text=element_text(size=12),axis.title=element_text(size=18))

ggplot(iris, aes(Sepal.Length, Sepal.Width, color = groups)) + geom_point() +
theme(axis.text=element_text(size=12),axis.title=element_text(size=18))


Métodos jerárquicos aglomerativos, código en R
• #visualizando los cluster generados en el dendrograma

plot(model, main="Dendrograma", xlab="puntos",
ylab="distancia",cex.lab=1.5,cex.main=1.5,cex.axis=1.3)

rect.hclust(model, k=2, border="black")


Métodos jerárquicos aglomerativos, ejemplo
Métodos jerárquicos aglomerativos, ejemplo
Métodos jerárquicos aglomerativos, problemas
• El algoritmo es muy lento computacionalmente


• Una vez que se ha definido combinar dos clusters, no existe la posibilidad de


revertir esta decisión


• No existe una función objetivo para minimizar


• Diferentes enfoques tienen distintos problemas


Métodos jerárquicos aglomerativos, ejemplo
• A estudiantes le pedieron describir solo mencionando
propiedades los siguientes conceptos:

-arm

-bacon

-chestnut

-eagle

-hair

-lips

-lobster

-ketchup

-sandwich

-scorpion

-thumb

-turkey

Métodos jerárquicos aglomerativos, ejemplo
• A estudiantes le pedieron describir solo mencionando
propiedades los siguientes conceptos:

-arm
 • 2625 propiedades fueron mencionadas.

-bacon
 317 propiedades distintas.

-chestnut
 Mínimo y máximo número de propiedades distintas para
-eagle
 un concepto 32 y 46 respectivamente.

-hair
 Propiedad más mencionada para un concepto => 30

-lips

-lobster

-ketchup

-sandwich

-scorpion

-thumb

-turkey

Métodos jerárquicos aglomerativos, ejemplo
• A estudiantes le pedieron describir solo mencionando
propiedades los siguientes conceptos:

-arm
 • 2625 propiedades fueron mencionadas.

-bacon
 317 propiedades distintas.

-chestnut
 Mínimo y máximo número de propiedades distintas para
-eagle
 un concepto 32 y 46 respectivamente.

-hair
 Propiedad más mencionada para un concepto => 30

-lips

Ejemplo de los datos

-lobster
 4 0 0 4 0 0 0 2 0 0 0 0 5 0 0
-ketchup
 0 0 0 2 0 13 0 0 0 2 0 0 0 0 0
-sandwich
 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0
0 0 0 0 3 0 0 0 0 0 2 9 9 0 2
-scorpion
 0 0 0 13 0 2 0 0 0 0 0 0 0 0 0
-thumb
 0 0 0 2 0 3 0 0 0 0 0 0 3 0 0
-turkey
 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0
0 0 17 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 10 0 3 0 0 0 0 0 0 6 0 0
Métodos jerárquicos aglomerativos, ejemplo
• A estudiantes le pedieron describir solo mencionando
propiedades los siguientes conceptos:

-arm
 • 2625 propiedades fueron mencionadas.

-bacon
 317 propiedades distintas.

-chestnut
 Mínimo y máximo número de propiedades distintas para
-eagle
 un concepto 32 y 46 respectivamente.

-hair
 Propiedad más mencionada para un concepto => 30

-lips

Ejemplo de los datos

-lobster
 4 0 0 4 0 0 0 2 0 0 0 0 5 0 0
-ketchup
 0 0 0 2 0 13 0 0 0 2 0 0 0 0 0
-sandwich
 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0
0 0 0 0 3 0 0 0 0 0 2 9 9 0 2
-scorpion
 0 0 0 13 0 2 0 0 0 0 0 0 0 0 0
-thumb
 0 0 0 2 0 3 0 0 0 0 0 0 3 0 0
-turkey
 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0
0 0 17 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 10 0 3 0 0 0 0 0 0 6 0 0

¿Qué clusters esperan?


Métodos jerárquicos aglomerativos, ejemplo
• A estudiantes le pedieron describir solo mencionando
propiedades los siguientes conceptos:

-arm
 • 2625 propiedades fueron mencionadas.

-bacon
 317 propiedades distintas.

-chestnut
 Mínimo y máximo número de propiedades distintas para
-eagle
 un concepto 32 y 46 respectivamente.

-hair
 Propiedad más mencionada para un concepto => 30

-lips

Ejemplo de los datos

-lobster
 4 0 0 4 0 0 0 2 0 0 0 0 5 0 0
-ketchup
 0 0 0 2 0 13 0 0 0 2 0 0 0 0 0
-sandwich
 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0
0 0 0 0 3 0 0 0 0 0 2 9 9 0 2
-scorpion
 0 0 0 13 0 2 0 0 0 0 0 0 0 0 0
-thumb
 0 0 0 2 0 3 0 0 0 0 0 0 3 0 0
-turkey
 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0
0 0 17 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 10 0 3 0 0 0 0 0 0 6 0 0

¿Qué clusters esperan?


¿Qué elección hay que realizar?
DM, clustering, HM, agglomerative, example
DM, clustering, HM, agglomerative, example
DM, clustering, HM, agglomerative, example
DM, clustering, HM, agglomerative, example
DM, clustering, HM, agglomerative, example
DM, clustering, HM, agglomerative, example
DM, clustering, HM, agglomerative, example
Métodos jerárquicos aglomerativos, datos
categóricos
• En el caso de datos categóricos hay que utilizar la disimilaridad de Gower,
que se encuentra en la librería cluster.

• La disimilaridad de Gower entre dos puntos corresponde al número de


variables donde difieren de valor cuyo valor sean distinto de 0:


Ejemplo

V1 V2 V3 V4 V5 V6 V7 V8 V9 V10

p1 = 1 4 3 3 2 3 1 0 4 0 

p2 = 0 4 3 2 2 3 1 0 4 1

Gower(p1,p2) = 3/9
Métodos jerárquicos aglomerativos, datos
categóricos
• En el caso de datos categóricos hay que utilizar la disimilaridad de Gower,
que se encuentra en la librería cluster.

• #Cargando librerías

install.packages("cluster")

library(cluster)


#Seleccionando datos categóricos y transformándolos a factor

data=mtcars[,c(2,8:11)]

for (i in 1:5){

data[,i]=as.factor(data[,i])

}


#Generando matriz de distancia y clusterizando

d=daisy(data)

model = hclust(d, method="complete")

plot(model)
Métodos jerárquicos aglomerativos, datos
categóricos
Segmentación de datos

Clustering

Métodos difusos
Contenidos
• Introducción

• Segmentación de datos

• Búsqueda de Patrones

• Clustering

• Introducción

• Métodos de partición

• Métodos de densidad

• Métodos jerárquicos

• Métodos difusos

• Evaluación
Métodos difusos
• En algoritmos de clustering difusos cada punto puede pertenecer a muchos
(típicamente a todos) los clusters con cierta probabilidad.
Métodos difusos, Fuzzy C-medias
• Fuzzy C-means (FCM) permite que cada punto pertenezca a más de un
cluster. Dado un número de clusters K (determinado por el usuario), cada
cluster es asociado con un centroide y cada punto es asignado a uno o más
clusters según una medida de similaridad.
Métodos difusos, Fuzzy C-medias
• Fuzzy C-means (FCM) permite que cada punto pertenezca a más de un
cluster. Dado un número de clusters K (determinado por el usuario), cada
cluster es asociado con un centroide y cada punto es asignado a uno o más
clusters según una medida de similaridad.

(membresía)

K-Medias
Métodos difusos, Fuzzy C-medias
• Fuzzy C-means (FCM) permite que cada punto pertenezca a más de un
cluster. Dado un número de clusters K (determinado por el usuario), cada
cluster es asociado con un centroide y cada punto es asignado a uno o más
clusters según una medida de similaridad.

(membresía) (membresía)

K-Medias Fuzzy C-medias


Métodos difusos, Fuzzy C-medias, entrenamiento
• Función de score: es una generalización de la distancia dentro-cluster
(usualmente distancia Euclidiana) de K-medias

K
X K
X X
wc(C) = wc(Ck ) = um
ik d(x(i), rk )
k=1 k=1 x(i)2Ck
Métodos difusos, Fuzzy C-medias, entrenamiento
• Función de score: es una generalización de la distancia dentro-cluster
(usualmente distancia Euclidiana) de K-medias

K
X K
X X
wc(C) = wc(Ck ) = um
ik d(x(i), rk )
k=1 k=1 x(i)2Ck

• U es una matriz de pertenencia/peso con valores entre 0 y 1, tal que


X K
uij = 1, 8j = 1, . . . , n
i=1
Métodos difusos, Fuzzy C-medias, entrenamiento
• Función de score: es una generalización de la distancia dentro-cluster
(usualmente distancia Euclidiana) de K-medias

K
X K
X X
wc(C) = wc(Ck ) = um
ik d(x(i), rk )
k=1 k=1 x(i)2Ck

• U es una matriz de pertenencia/peso con valores entre 0 y 1, tal que


X K
uij = 1, 8j = 1, . . . , n
i=1
• m ∈ [1, ∞) es un difusor que determina que tan difusos serán los clusters. Un
m muy grande genera pertenencias pequeñas (uij), y por lo tanto cluster más
difusos. En el límite m=1, todos los valores uij convergen a 0 o 1, obteniendo
el algoritmo de K-medias
Métodos difusos, Fuzzy C-medias, algoritmo
K
X
• Paso 1: Generar U en forma aleatoria, tal que
 uij = 1, 8j = 1, . . . , n

 i=1


 Xn
um
ij x(i)
j=1
• Paso 2: Seleccionar K centroides Ci según
 ri = n
X

 uij
j=1
• Paso 3: Calcula la función de costo wc(C). Si el costo que se obtiene aumenta
o es menor a un límite (definido por el usuario), parar el algoritmo. 


1
• Paso 4: Re-calcular la matriz U con
uij = K ✓
X ◆2/(m 1)
d(ri , x(j))
• Paso 5: Ir al Paso 2
d(rk , x(j))
k=1
Métodos difusos, Fuzzy C-medias, código en R
• #Apliquemos C-medias con 3 clusters

install.packages(“fclust”)

library(fclust)

model = FKM(iris[1:4], 3) 

model 

Number of objects: 150


Number of clusters: 3 


Closest hard clustering partition: 

1 2 3 4 5 6 7 8 9 10 11 12 13 …. 150

2 2 2 2 2 2 2 2 2 2 2 2 2 …. 1


Membership degree matrix (rounded): 

Clus 1 Clus 2 Clus 3

1 0.00 1.00 0.00

2 0.02 0.98 0.01

3 0.01 0.98 0.01

…

150 0.58 0.03 0.39
Métodos difusos, Fuzzy C-medias, código en R
• #Veamos los atributos del modelo aprendido

attributes(model) 

$names

[1] "U" "H" "clus" "value" "cput" "iter" "k" "m" "stand" "Xca" "X" "call" 


model$U => matriz indicando la pertenencia de cada punto a un cluster 

model$H => La posición de los centroides

model$clus => matriz con el cluster al que pertenece cada dato y su probabilidad

model$value => Valor final de la función objetivo

model$cput => Tiempo computacional del algoritmo

model$iter => Número de iteraciones realizadas

model$k => Número de clusters

model$m => Valor parámetro m (predefinido en 2)

model$stan => Para estandarizar los datos (predefinido en 0 = NO estandarizar)

model$Xca => Datos utilizados para el clustering (si stan=0 => model$X)

model$X => Datos originales

model$call => Código utilizado para llamar a la función

Métodos difusos, Fuzzy C-medias, código en R
• #Veamos un plot de los cluster encontrados

plot(model, v1v2=c(1,2), ucex=TRUE, pca=FALSE)

v1v2 => Variable a imprimir.

ucex => El tamaño del punto indica la pertenencia del cluster.

pca => Estandarización de los datos y aplicación de Principal Component Analysis
para una mejor visualización de los datos
Métodos difusos, Fuzzy C-medias, código en R
• #Veamos un plot de los cluster encontrados

plot(model, v1v2=c(1,2), ucex=TRUE, pca=TRUE)

Métodos difusos, Fuzzy C-medias, código en R
• #Apliquemos C-medias con 3 clusters

model = FKM(iris[1:4], 3)

• #C-medias: difusor igual a 4 (parámetro m)



model = FKM(iris[1:4], 3, m=4)

• #C-medias: 5 puntos de partida aleatorios



model = FKM(iris[1:4], 3, m=4, RS=5)

• #C-medias: estandarizando los datos



model = FKM(iris[1:4], 3, m=4, RS=5, stand=1)

• #C-medias: fijando limite de convergencia



model = FKM(iris[1:4], 3, m=4, RS=5, stand=1, conv=0.001)

• #C-medias: fijando número máximo de iteraciones 



model = FKM(iris[1:4], 3, m=4, RS=5, stand=1, conv=0.001, maxit=100)
Métodos difusos, Fuzzy C-medias, ejemplo

m=10

m=1.1
Métodos difusos, modelo de mezcla de Gaussianas
(GMM)

• El modelo de mezcla de Gaussianas (Gaussian Mixture Model) asume que


cada datos fue generado de una mezcla de K Gaussianas multidimensionales,
donde cada componente tiene parámetros: Nk(μk,∑k) 


K
X K
X K
X
p(x) = p(k)p(x|k) = p(k)p(x|x ⇠ N (µk , ⌃k )) = ⇡k N (µk , ⌃k )
k=1 k=1 k=1
Métodos difusos, GMM, Gaussiana
multidimensional

• Una Gaussiana multidimensional, para datos con p dimensiones se define


como:

x ⇠ N (µ, ⌃)
donde
µ = (E[X1 ], . . . , E[Xp ])
2 3
V ar(X1 ) ··· Cov(X1 , Xp )
⌃=4 ··· ··· ··· 5
Cov(X1 , Xp ) ··· V ar(Xp )

✓ ◆
1 1
p(x) = p(x1 , · · · , xp ) = p exp (x µ)T ⌃ 1
(x µ)
(2⇡)p |⌃| 2
Métodos difusos, GMM, aprendizaje
• ¿Cómo podemos aprender los parámetros?
K
X
p(x) = ⇡k N (µk , ⌃k )
k=1
Coeficientes de Componentes de media
mezcla y matriz de covarianza
Métodos difusos, GMM, aprendizaje
• ¿Cómo podemos aprender los parámetros?
K
X
p(x) = ⇡k N (µk , ⌃k )
k=1
• Aplicando el método de la maxima verosimilitud (maximum likelihood), se
obtiene que el logaritmo de la verosimilitud de los datos !
es:
YN
ln P (D|⇡, µ, ⌃) = ln p(xi |M )
i=1
N
X
= ln p(xi |M )
i=1
N
"K #
X X
= ln ⇡k N (µk , ⌃k ))
i=1 k=1
Métodos difusos, GMM, aprendizaje
• ¿Cómo podemos aprender los parámetros?
K
X
p(x) = ⇡k N (µk , ⌃k )
k=1

lamentablemente, no existe
• Aplicando el método de la maxima verosimilitud (maximum likelihood), se
obtiene que el logaritmo de la verosimilitud de los datos !
es:

una
ln P solución
(D|⇡, µ, ⌃) =analítica (cerrada)
YN
ln p(xi |M )
para su maximización
N
i=1
X
= ln p(xi |M )
i=1
N
"K #
X X
= ln ⇡k N (µk , ⌃k ))
i=1 k=1
Métodos difusos, GMM, aprendizaje
• Si asumimos que dado el punto xi se conoce el valor de una nueva variable z,
donde zij=1 implica que xi fue generada por la distribución normal j.
8 K
>
> Y
Z C1 C2 … CK >
> p(z = 1) = ⇡ ) P (z ) = ⇡ zik
>
>
ik k i k
x1 0 1 0 < i=1
x2 0 0 1 ) p(xi |zik = 1) = N (xi |µk , ⌃k )
>
> K
… >
> Y
>
> p(x , z ) = ⇡ zik
N (x |µ , ⌃ ) zik
xn 0 0 0 : i i k i k k
i=1
K
X K
X
p(x) = p(z)p(x|z) = ⇡k N (x|µk , ⌃k )
k=1 k=1
• Hemos llegado a la misma expresión anterior pero con una nueva variable.

• Sin embargo, también se puede trabajar con la distribución conjunta p(x,z)


Métodos difusos, GMM, aprendizaje
• Considerando que
" K
#
X
ln p(x|⇡, µ, ⌃) = ln p(x, z|⇡, µ, ⌃)
k=1
• Podemos calcular el log likelihood de p(D,Z)

N Y
Y K
p(D, Z|⇡, µ, ⌃) = ⇡kznk N (xn |µk , ⌃k )znk
n=1 k=1
N X
X K
ln p(D, Z|⇡, µ, ⌃) = znk (ln ⇡k + ln N (xn |µk , ⌃k ))
n=1 k=1
Métodos difusos, GMM, aprendizaje
• Considerando que
" K
#
X
ln p(x|⇡, µ, ⌃) = ln p(x, z|⇡, µ, ⌃)
k=1
• Podemos calcular el log likelihood de p(D,Z)

N Y
Y K
p(D, Z|⇡, µ, ⌃) = ⇡kznk N (xn |µk , ⌃k )znk
n=1 k=1
N X
X K
ln p(D, Z|⇡, µ, ⌃) = znk (ln ⇡k + ln N (xn |µk , ⌃k ))
n=1 k=1

• Obteniendo las siguientes soluciones (máxima verosimilitud)

1 Cada distribución normal puede ser


⇡k = znk N (µk , ⌃k ) calculada usando solo los puntos
N que pertenecen al cluster k.

Métodos difusos, GMM, aprendizaje


• Considerando que
" K
#
X
ln p(x|⇡, µ, ⌃) = ln p(x, z|⇡, µ, ⌃)
k=1
• Podemos calcular el log likelihood de p(D,Z)

N Y
Y K

Desafortunadamente, 

p(D, Z|⇡, µ, ⌃) =
n=1 k=1
⇡kznk N (xn |µk , ⌃k )znk

Z µ,es
⌃) =desconocido
XX N K
ln p(D, Z|⇡, z (ln ⇡ + ln N (x |µ , ⌃ ))
nk k n k k
n=1 k=1

• Obteniendo las siguientes soluciones (máxima verosimilitud)

1 Cada distribución normal puede ser


⇡k = znk N (µk , ⌃k ) calculada usando solo los puntos
N que pertenecen al cluster k.

Métodos difusos, GMM, aprendizaje


• Podemos utilizar el algoritmo de Expectation-Maximization, el cual, maximiza
el valor esperado del log likelihood con respecto a Z

N X
X K
EZ [ln p(D, Z|⇡, µ, ⌃)] = E[znk ](ln ⇡k + ln N (xn |µk , ⌃k ))
n=1 k=1

⇡k N (xn |µk , ⌃k )
E[znk ] = PK
j=1 ⇡j N (xn |µj , ⌃j )
• E[znk] es la probabilidad de que el punto n sea generado por el cluster k
(N(𝞵k,∑k) con respecto a las K distribuciones normales posibles.
Métodos difusos, GMM, aprendizaje
• Algoritmo

1. Elegir valores iniciales para 𝞹 𝞵k ∑k

⇡k N (xn |µk , ⌃k )
2. E-step: estimar todos los
 E[znk ] = P
K

 j=1 ⇡j N (xn |µj , ⌃j )

N X
X K
3. M-step: maximizarE
 Z [ln p(D, Z|⇡, µ, ⌃)] = E[znk ](ln ⇡k + ln N (xn |µk , ⌃k ))

 N
n=1 k=1


 1 X X N


 µk = N E[zik ]xi Nk = E[zik ]


k i=1

 i=1
N

 1 X Nk
T ⇡k =
⌃k =
 E[zik ](xi µk )(xi µk )
Nk N
i=1

4. Verificar convergencia de los parámetros, si la convergencia no es


satisfecha ir al paso 2.
Métodos difusos, GMM, ejemplo datos flor de iris
Métodos difusos, GMM, ejemplo datos flor de iris
Métodos difusos, GMM, ejemplo datos flor de iris
Métodos difusos, GMM, código en R
• #Apliquemos GMM con 3 clusters

install.packages(“mclust”)

library(mclust)

model = Mclust(iris[1:4], 3) 

summary(model)

----------------------------------------------------

Gaussian finite mixture model fitted by EM algorithm 

----------------------------------------------------


Mclust VEV (ellipsoidal, equal shape) model with 3 components:

log.likelihood n df BIC ICL

-186.074 150 38 -562.5522 -566.4673


Clustering table:

1 2 3

50 45 55
Métodos difusos, GMM, código en R
• #Veamos los atributos más importantes del modelo aprendido

attributes(model) 

$names

[1] "call" "data" "modelName" "n" "d" "G" 

[7] "BIC" "bic" "loglik" "df" "hypvol" "parameters" 

[13] "z" "classification" "uncertainty" 


model$call => Código utilizado para llamar a la función

model$modelName => Tipo de varianza utilizada para modelar los datos
(distribución, volumen, forma, y orientación)

model$d => dimensión de los datos

model$G => Número de componentes

model$BIC => Bayesian Information criteria (para todos los modelos)

model$bic => Bayesian Information criteria (del mejor modelo)

model$loglik => Log-likelihood del modelo

model$parameters => Los parámetros aprendidos

model$z => matriz con la probabilidad de pertenencia de los datos a cada cluster

model$classification => Clasificación de los datos 

model$uncertainty => La incertidumbre asociada con la clasificación

Métodos difusos, GMM, tipos de modelos
• #Veamos los tipos de modelamiento de la Varianza

model$BIC

Bayesian Information Criterion (BIC):

EII VII EEI VEI EVI VVI EEE EVE VEE VVE EEV VEV EVV VVV

Valores
Métodos difusos, GMM, código en R
• #Graficando los modelos aprendidos

plot(model)

Model-based clustering plots: 

1: BIC

2: classification

3: uncertainty

4: density

Métodos difusos, GMM, código en R
• #Graficando los modelos aprendidos

plot(model)

Model-based clustering plots: 

1: BIC

2: classification

3: uncertainty

4: density

Métodos difusos, GMM, código en R
• #Graficando los modelos aprendidos

plot(model)

Model-based clustering plots: 

1: BIC

2: classification

3: uncertainty

4: density

Métodos difusos, GMM, seleccionando K
• Como seleccionar K?

• Un modelo más complejo (mayor K) siempre minimiza el likelihood.

• Es necesario penalizar la complejidad del modelo. Necesitamos balancear


entre la simplicidad del modelo (bajo K) y que tan bien se modelan los
datos (bajo likelihood).
Métodos difusos, GMM, seleccionando K
• Como seleccionar K?

• Un modelo más complejo (mayor K) siempre minimiza el likelihood.

• Es necesario penalizar la complejidad del modelo. Necesitamos balancear


entre la simplicidad del modelo (bajo K) y que tan bien se modelan los
datos (bajo likelihood).

• Score(M) = error(M) + penalización(M) 



Penalización puede depender del número de parámetros del modelo (p) y del
número de puntos (n).

El error esta basado, normalmente, en el likelihood de los datos (L).

• BIC (Bayesian information criterion): ScoreBIC = -2 log L + p log n


Métodos difusos, GMM, seleccionando K
• #Entrenemos el modelo con multiples K

model = Mclust(iris[1:4],1:9)

model$BIC

Bayesian Information Criterion (BIC):

EII VII EEI VEI EVI VVI EEE … VVV

1 Valores de BIC

2 …

9 Valores de BIC


Top 3 models based on the BIC criterion:

VEV,2 VEV,3 VVV,2 

-561.7285 -562.5522 -574.0178

• El mejor modelo corresponde a 2 Gaussianas con varianza modelada a través


de VEV

Métodos difusos, GMM, código en R
• #Graficando los modelos aprendidos

plot(model)

Model-based clustering plots: 

1: BIC

2: classification

3: uncertainty

4: density
Segmentación de datos

Clustering

Evaluación
Contenidos
• Introducción

• Segmentación de datos

• Búsqueda de Patrones

• Clustering

• Introducción

• Métodos de partición

• Métodos de densidad

• Métodos jerárquicos

• Métodos difusos

• Evaluación
Evaluación
• ¿Como podemos evaluar que tan bueno es un cluster?

• Esto nos ayudaría a:


0.9

0.8

• Evitar encontrar cluster en datos de ruido.


0.7

0.6

• Comparar algoritmos de clustering

0.5

y
0.4

0.3

• Comparar dos conjuntos de clusters 0.2

0.1

0
0 0.2 0.4 0.6 0.8 1
x
Puntos aleatorios
Evaluación
• ¿Como podemos evaluar que tan bueno es un cluster?

• Esto nos ayudaría a:


0.9

0.8

• Evitar encontrar cluster en datos de ruido.


0.7

0.6

• Comparar algoritmos de clustering

0.5

y
0.4

0.3

• Comparar dos conjuntos de clusters 0.2

0.1

0
0 0.2 0.4 0.6 0.8 1
x
Puntos aleatorios
1 1
1
0.9 0.9
0.9
0.8 0.8
0.8
0.7 0.7
0.7
0.6 0.6
0.6
0.5 0.5
y

0.5

y
0.4 0.4
0.4
0.3 0.3
0.3
0.2 0.2
0.2
0.1 0.1
0.1
0 0
0 0.2 0.4 0.6 0.8 1 0 0.2 0.4 0.6 0.8 1 0
0 0.2 0.4 0.6 0.8 1
x x
K-medias DBSCAN Complete
x Link
Evaluación
• Evaluación de cluster, enfoques:

• Determinar la tendencia de clusters en los datos, es decir, distinguir si


realmente existen estructurar no aleatorias en los datos.

• Evaluar clusters conociendo la etiqueta de clase (supervisados).

• Evaluar si los clusters “se ajustan” a los datos (no supervisado).

• Dado multiples clusterizaciones de los datos, determinar cual de ellos


representa mejor la estructura de los datos.

• Determinar el número “correcto” de clusters.


Evaluación, tendencia de clusters
• Tendencia de clusters: evalúa si existe la presencia de clusters en los
datos, antes de realizar el clustering.

• Enfoque más común (para datos numéricos con pocas dimensiones), es usar
un test estadístico de aleatoriedad espacial.
Evaluación, tendencia de clusters
• Tendencia de clusters: evalúa si existe la presencia de clusters en los
datos, antes de realizar el clustering.

• Enfoque más común (para datos numéricos con pocas dimensiones), es usar
un test estadístico de aleatoriedad espacial.

• Estadístico de Hopkins: Tomar una muestra aleatoria de p puntos desde los


datos, y generar p datos aleatorios en el mismo espacio
p
X
wi wi: distancia del punto aleatorio i, a su vecino
más cercano de los puntos originales.

i=1
H= p p
X X ui: distancia del punto original i, a su vecino
ui + wi más cercano de los puntos originales.

i=1 i=1
Evaluación, tendencia de clusters
• Tendencia de clusters: evalúa si existe la presencia de clusters en los
datos, antes de realizar el clustering.

• Enfoque más común (para datos numéricos con pocas dimensiones), es usar
un test estadístico de aleatoriedad espacial.

• Estadístico de Hopkins: Tomar una muestra aleatoria de p puntos desde los


datos, y generar p datos aleatorios en el mismo espacio
p
X
wi wi: distancia del punto aleatorio i, a su vecino
más cercano de los puntos originales.

i=1
H= p p
X X ui: distancia del punto original i, a su vecino
ui + wi más cercano de los puntos originales.

i=1 i=1

• Valor cercano a 0.5 indica datos aleatorios.



Valor cercano a 1.0 indica datos altamente clusterizados.

Valor cercano a 0.0 indica datos uniformemente distribuidos.
Evaluación, tendencia de clusters, estadístico de
Hopkins, ejemplo

H=0.8191
 H=0.4975

p=50 p=50
Evaluación, tendencia de clusters, estadístico de
Hopkins, código en R
• #Cargando paquete 

install.packages("factoextra")

library(factoextra)

#Calculando el estadístico de Hopkins

res = get_clust_tendency(iris[,1:4], n = 30, graph = FALSE)

#El paquete devuelve 1 menos el valor del estadístico

1-res$hopkins_stat

0.830
Evaluación, tendencia de clusters, estadístico de
Hopkins, código en R
• #Cargando paquete 

install.packages("factoextra")

library(factoextra)

#Calculando el estadístico de Hopkins

res = get_clust_tendency(iris[,1:4], n = 30, graph = FALSE)

#El paquete devuelve 1 menos el valor del estadístico

1-res$hopkins_stat

0.830

• #Generando datos aleatorios



dataRandom = matrix(0, nrow = 150, ncol = 4)

for (i in 1:4){

dataRandom[,i] = runif(150,min(iris[,i]),max(iris[,i]))

}

#Calculando el estadístico de Hopkins

res = get_clust_tendency(dataRandom, n = 30, graph = FALSE)

1-res$hopkins_stat

0.477

Evaluación, evaluación no supervisada
• Evaluación no supervisada: mide el ajuste de los cluster en los datos que
no tienen etiquetas/clases.

• Existen diversos enfoques en la evaluación no supervisada:

• Inspección visual de la matriz de proximidad

• Medidas internas: Cohesión, Separación, y Coeficiente de Silhouette. 



Evaluación, evaluación no supervisada, visual
• Calcular la matriz de proximidad (distancia) entre los puntos.

• Ordenar la matrix de proximidad según la etiqueta de los clusters.

• Inspeccionar en forma visual (un buen clustering exhibe claros patrones de


bloques)
Evaluación, evaluación no supervisada, visual
• Calcular la matriz de proximidad (distancia) entre los puntos.

• Ordenar la matrix de proximidad según la etiqueta de los clusters.

• Inspeccionar en forma visual (un buen clustering exhibe claros patrones de


bloques)
Evaluación, evaluación no supervisada, visual
• Calcular la matriz de proximidad (distancia) entre los puntos.

• Ordenar la matrix de proximidad según la etiqueta de los clusters.

• Inspeccionar en forma visual (un buen clustering exhibe claros patrones de


bloques)
Evaluación, evaluación no supervisada, visual
• Calcular la matriz de proximidad (distancia) entre los puntos.

• Ordenar la matrix de proximidad según la etiqueta de los clusters.

• Inspeccionar en forma visual (un buen clustering exhibe claros patrones de


bloques)
Evaluación, evaluación no supervisada, visual,
código en R
• #Generando matriz de disimilaridad 

K=3

data=iris[,1:4] 

model = kmeans(data, K)

tempDist=as.matrix(dist(data))


#Ordenando columnas según clusters

index=which(model$cluster==1)

for (i in 2:K){

index=c(index,which(model$cluster==i))

}

tempDist=tempDist[index,index]


#Graficando la matriz

library(lattice)

levelplot(tempDist)
Evaluación, evaluación no supervisada, visual,
código en R

Matriz de disimilaridad 
 Matriz de disimilaridad 



para datos iris para datos aleatorios
Evaluación, evaluación no supervisada, medidas
internas, cohesión
• Cohesión: Mide que tan cercanos están los objetos dentro de
cada cluster.

• Suma de errores cuadrados (SSE) es la suma de la distancia al


cuadrado de un punto al centroide de su cluster.
K X
X
SSEtotal = (x C i )2 cohesión

k=1 x2Ck
Evaluación, evaluación no supervisada, medidas
internas, cohesión
• Cohesión: Mide que tan cercanos están los objetos dentro de
cada cluster.

• Suma de errores cuadrados (SSE) es la suma de la distancia al


cuadrado de un punto al centroide de su cluster.
K X
X
SSEtotal = (x C i )2 cohesión

k=1 x2Ck

× ×C ×
1 C1 2 3 4 C2 5

K=1 ) SSEtotal = (1 3)2 + (2 3)2 + (4 3)2 + (5 3)2 = 10


K=2 ) SSEtotal = (1 1.5)2 + (2 1.5)2 + (4 4.5)2 + (5 4.5)2 = 1
Evaluación, evaluación no supervisada, medidas
internas, separación
• Separación: Mide que tan distinto son los clusters con respecto a los otros.

• Suma cuadrada entre grupos (SSB) es la suma de la distancia al cuadrado


de un centroide a la media de todos los datos.

K
X
2
SSBtotal = |Ci |(C i X)
k=1 separación
Evaluación, evaluación no supervisada, medidas
internas, separación
• Separación: Mide que tan distinto son los clusters con respecto a los otros.

• Suma cuadrada entre grupos (SSB) es la suma de la distancia al cuadrado


de un centroide a la media de todos los datos.

K
X
2
SSBtotal = |Ci |(C i X)
k=1 separación

× X× C ×
1 C1 2 3 4 C2 5

2
K=1 ) SSBtotal = 4 ⇤ (3 3) = 0
2 2
K=2 ) SSBtotal = 2 ⇤ (1.5 3) + 2 ⇤ (4.5 3) = 9
Evaluación, evaluación no supervisada, medidas
internas, cohesión y separación
• Cohesión y separación: La suma de SSEtotal y SSBtotal es igual a la suma de
la distancia al cuadrado de todos los puntos con respecto a la media.

• Entonces minimizar cohesión es equivalente a maximizar separación.


× X× C ×
1 C1 2 3 4 C2 5

K=1 ) SSEtotal = (1 3)2 + (2 3)2 + (4 3)2 + (5 3)2 = 10


2
K=1 ) SSBtotal = 4 ⇤ (3 3) = 0
K=2 ) SSEtotal = (1 1.5)2 + (2 1.5)2 + (4 4.5)2 + (5 4.5)2 = 1
K=2 ) SSBtotal = 2 ⇤ (1.5 3)2 + 2 ⇤ (4.5 3)2 = 9
Evaluación, evaluación no supervisada, medidas
internas, cohesión y separación, código en R
• #Instalando paquetes para calcular distancia de un punto a otros

install.packages("flexclust")

library(flexclust)
Evaluación, evaluación no supervisada, medidas
internas, cohesión y separación, código en R
• #Instalando paquetes para calcular distancia de un punto a otros

install.packages("flexclust")

library(flexclust)

• #Aplicando K-means a datos Iris



K=3

model = kmeans(iris[,1:4],K,nstart=5)
Evaluación, evaluación no supervisada, medidas
internas, cohesión y separación, código en R
• #Instalando paquetes para calcular distancia de un punto a otros

install.packages("flexclust")

library(flexclust)

• #Aplicando K-means a datos Iris



K=3

model = kmeans(iris[,1:4],K,nstart=5)

• #Calculando cohesión

withinCluster=numeric(K)

for (i in 1:K){

#Seleccionando datos pertenecientes al cluster

tempData=iris[which(model$cluster==i),1:4]

#Calculando distancia del centro del cluster al resto de los puntos

withinCluster[i]=sum(dist2(tempData,colMeans(tempData))^2)

}

cohesion = sum(withinCluster)

cohesion

78.85
Evaluación, evaluación no supervisada, medidas
internas, cohesión y separación, código en R
• #Centro de los datos

meanData=colMeans(iris[,1:4])

#Calculando separación

SSB=numeric(K)

for (i in 1:K){

#Seleccionando datos pertenecientes al cluster

tempData=iris[which(model$cluster==i),1:4]

#número de puntos por distancia entre centro cluster y datos

SSB[i]=nrow(tempData)*sum((meanData-colMeans(tempData))^2)

}

separacion = sum(SSB)

separacion

602.52
Evaluación, evaluación no supervisada, medidas
internas, cohesión y separación, código en R
• #Centro de los datos

meanData=colMeans(iris[,1:4])

#Calculando separación

SSB=numeric(K)

for (i in 1:K){

#Seleccionando datos pertenecientes al cluster

tempData=iris[which(model$cluster==i),1:4]

#número de puntos por distancia entre centro cluster y datos

SSB[i]=nrow(tempData)*sum((meanData-colMeans(tempData))^2)

}

separacion = sum(SSB)

separacion

602.52

• #Distancia de todos los puntos al medio



totalSum=sum(dist2(iris[,1:4],meanData)^2)

totalSum

681.37 = 602.52 + 78.85
Evaluación, evaluación no supervisada, medidas
internas, cohesión y separación, código en R
• #Comparemos con los datos aleatorios (dataRandom)

model = kmeans(dataRandom,K,nstart=5)

meanDataRandom=colMeans(dataRandom)

withinClusterRandom=numeric(K)

SSBRandom=numeric(K)

for (i in 1:K){

tempData=dataRandom[which(model$cluster==i),]

withinClusterRandom[i]=sum(dist2(tempData,colMeans(tempData))^2)

SSBRandom[i]=nrow(tempData)*sum((meanDataRandom-
colMeans(tempData))^2)

}

sum(withinClusterRandom)

321.3932

sum(SSBRandom)

397.5727


Fijarse que la suma es similar 718.966
Evaluación, evaluación no supervisada, medidas
internas, coeficiente de silhouette (silueta)
• El coeficiente de Silhouette combina cohesión y separación. Normalmente,
varia entre [-1,1], con valores cercanos a 1 indicando una mejor clusterización.

• Para cada punto i:

• Calcular ai, la distancia promedio del punto i a los puntos del mismo cluster.

• Calcular bij, la distancia promedio del punto i a todos los puntos del cluster j.

• Calcular bi, el mínimo bij tal que i no pertenezca al cluster j.

• El coeficiente de Silhouette para el punto i es Si = (bi-ai) / max(ai,bi)


Evaluación, evaluación no supervisada, medidas
internas, coeficiente de silhouette (silueta)
• El coeficiente de Silhouette combina cohesión y separación. Normalmente,
varia entre [-1,1], con valores cercanos a 1 indicando una mejor clusterización.

• Para cada punto i:

• Calcular ai, la distancia promedio del punto i a los puntos del mismo cluster.

• Calcular bij, la distancia promedio del punto i a todos los puntos del cluster j.

• Calcular bi, el mínimo bij tal que i no pertenezca al cluster j.

• El coeficiente de Silhouette para el punto i es Si = (bi-ai) / max(ai,bi)

• Un valor negativo implica que el punto i es más cercano a otro cluster, que a su
propio cluster. Si ai es cercano a 0 (baja cohesión), entonces Si es cercano a 1.

• El coeficiente de silhouette de un cluster es el promedio de los coeficientes de


silhouette de los puntos pertenecientes al cluster.

• El coeficiente de silhouette general es el promedio de los coeficientes de


silhouette de todos los puntos.
Evaluación, evaluación no supervisada, medidas
internas, coeficiente de silhouette, ejemplo
• ai => la distancia promedio del punto i a los puntos del mismo cluster.

bij => la distancia promedio del punto i a todos los puntos del cluster j.

bi => el mínimo bij tal que i no pertenezca al cluster j.

El coeficiente de Silhouette para el punto i es Si = (bi-ai) / max(ai,bi)

C2
× ×
1 C1 2 3 4 5

ai bi1 bi2 bi si
1 —
2 —
3 —
5 —
Evaluación, evaluación no supervisada, medidas
internas, coeficiente de silhouette, ejemplo
• ai => la distancia promedio del punto i a los puntos del mismo cluster.

bij => la distancia promedio del punto i a todos los puntos del cluster j.

bi => el mínimo bij tal que i no pertenezca al cluster j.

El coeficiente de Silhouette para el punto i es Si = (bi-ai) / max(ai,bi)

C2
× ×
1 C1 2 3 4 5

ai bi1 bi2 bi si
1 1.0 — 3.0 3.0 2/3
2 1.0 — 2.0 2.0 1/2
3 2.0 1.5 — 1.5 -0.5/2
5 2.0 3.5 — 3.5 1.5/2
Evaluación, evaluación no supervisada, medidas
internas, coeficiente de silhouette, ejemplo
• ai => la distancia promedio del punto i a los puntos del mismo cluster.

bij => la distancia promedio del punto i a todos los puntos del cluster j.

bi => el mínimo bij tal que i no pertenezca al cluster j.

El coeficiente de Silhouette para el punto i es Si = (bi-ai) / max(ai,bi)

C1 C2
× ×
1 2 3 4 5

ai bi1 bi2 bi si
1 1.5 — 4.0 4.0 2.5/4
2 1.0 — 3.0 3.0 2/3
3 1.5 — 2.0 2.0 0.5/2
5 0.0 3.0 — 3.0 1.0
Evaluación, evaluación no supervisada, medidas
internas, coeficiente de silhouette, código en R
• #Instalando paquetes para calcular distancia de un punto a otros

install.packages("cluster")

library(cluster)

• #Aplicando K-means a datos Iris



K=3

model = kmeans(iris[,1:4],K,nstart=5)

• #Calculando coeficiente de silhouette



coefSil=silhouette(model$cluster,dist(iris[,1:4]))

coefSil

cluster neighbor sil_width

[1,] 3 1 0.85295506

[2,] 3 1 0.81549476

…

[150,] 3 1 0.18544229
Evaluación, evaluación no supervisada, medidas
internas, coeficiente de silhouette, código en R
• #Visualizando los valores por clusters

summary(coefSil)

Silhouette of 150 units in 3 clusters from 

silhouette.default(x = model$cluster, dist = dist(iris[, 1:4])) :

Cluster sizes and average silhouette widths:

62 38 50 

0.4173199 0.4511051 0.7981405 

Individual silhouette widths:

Min. 1st Qu. Median Mean 3rd Qu. Max. 

0.02636 0.39115 0.56231 0.55282 0.77552 0.85391
Evaluación, evaluación no supervisada, medidas
internas, coeficiente de silhouette, código en R
• #Visualización gráfica

plot(coefSil, col = c("red", "green", "blue"))

Evaluación, evaluación no supervisada, medidas
internas, coeficiente de silhouette, código en R
• #Visualización gráfica datos aleatorios

plot(silhouette(model$cluster,dist(dataRandom)), col = c("red", "green", "blue"))

Evaluación, determinar K
• Para determinar el mejor valor de K,
hay que evaluar alguna medida
específica (Silhouette, SSEtotal, BIC),
sobre un rango de K clusters, y mirar
por un peak, “bajada”, o codo en la
medida de evaluación.
Evaluación, determinar K, código en R
• #Calculemos los valores del coeficiente de Silhouette

coefSil=numeric(10)

for (k in 2:10){

model = kmeans(iris[1:4], k)

temp = silhouette(model$cluster,dist(iris[,1:4]))

coefSil[k]=mean(temp[,3])

}
Evaluación, determinar K, código en R
• #Calculemos los valores del coeficiente de Silhouette

coefSil=numeric(10)

for (k in 2:10){

model = kmeans(iris[1:4], k)

temp = silhouette(model$cluster,dist(iris[,1:4]))

coefSil[k]=mean(temp[,3])

}
“The validation of clustering structures is the most
difficult and frustrating part of cluster analysis.
Without a strong effort in this direction, cluster
analysis will remain a black art accessible only to
those true believers who have experience and great
courage.”

Algorithms for Clustering Data, Jain and Dubes