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. Datos originales Después de aplicar PCA . 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.

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

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

Reducción de dimensionalidad. 0.1728] .312 r an sf t  -0. PCA.950 ↵ = [1.950 rv e p e s u l a n y Calc ormació ↵1 = 0. paso a paso Centrar datos s d e  ct o re o s 0.312 ↵2 = 0.460.

0.1728] . PCA.312 Transformar los datos 0.312 r an sf t  ↵2 = -0.950 ↵ = [1.460. paso a paso Centrar datos s d e  ct o re o s 0. Reducción de dimensionalidad.950 rv e p e s u l a n y Calc ormació ↵1 = 0.

Reducción de dimensionalidad. flor de iris • Largo y ancho del pétalo. PCA. largo y ancho del sépalo .

1 1.Métodos jerárquicos aglomerativos.5 0.4 0.6 3.0 5.1 3.1 1.Length Petal.9 3.7 3. código en R • #mostrando los datos IRIS
 iris 
 
 Sepal.Width Species
 1 5.2 setosa
 2 4.5 1.9 3.2 1.4 0.Width Petal.0 1.2 setosa
 …
 150 5.2 setosa
 4 4.8 virginica .2 setosa
 3 4.3 0.Length Sepal.

axis.text=element_text(size=12).Width))+ geom_point() +theme(axis. Sepal. código en R • #Visualicemos los datos IRIS
 library(ggplot2)
 ggplot(iris.title=element_text(size=18)) . Petal.title=element_text(size=18)) • ggplot(iris.axis.Length.Width))+ geom_point() +theme(axis. aes(Petal. aes(Sepal.Length.text=element_text(size=12).Métodos jerárquicos aglomerativos.

5810 . ejemplo • Ejemplo datos flor de iris sepal sepal petal petal original length width length width % Varianza 15% 4% 68% 13% Varianza 0. PCA.1900 3.Reducción de dimensionalidad.6857 0.1163 0.

ejemplo • Ejemplo datos flor de iris sepal sepal petal petal original length width length width % Varianza 15% 4% 68% 13% Varianza 0.1900 3.0238 . PCA.2282 0.Reducción de dimensionalidad.6857 0.1163 0.5810 Transfor
 1er 2do 3er 4to mación % Varianza 92% 5% 2% 1% Peso 4.2427 0.0782 0.

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%

9998 -0.2% proline 0. estandarización • Ejemplo.0178 original 99% 0.Reducción de dimensionalidad.0179 0. 3 tipos de vinos Peso 1st 2nd % Varianza proline magnesium magnesium 0. PCA.9993 . datos de vino: 13 atributos.

. datos de vino: 13 atributos.Reducción de dimensionalidad.2% de la varianza debido a la escala de los datos). 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. • Estandarización de cada variable a varianza 1. estandarización • Ejemplo. transforma la covarianza a la correlación entre variables. PCA.

3 tipos de vinos % Varianza proline magnesium % Varianza 1er 2do 3er 4to … 13vo original 99% 0. datos de vino: 13 atributos. PCA.1% .2% Transformado 36% 19% 11% 7% … 0.Reducción de dimensionalidad. estandarización • Ejemplo.

nos permite determinar el número de componentes (variables) a determinar. seleccionando variables • Ejemplo. PCA.Reducción de dimensionalidad. . datos de vino: 13 atributos. 3 tipos de vinos • Graficando el % de varianza explicado por cada componente y la suma acumulada de las varianzas.

Length 0.7536574 .07623608 -0.08452251 -0.85667061 0.Reducción de dimensionalidad.65658877 0.07548102 -0..4798390
 Petal.73016143 -0.35828920 0.3154872
 Sepal.0562689 0. PCA.Width -0.36138659 -0.Length 0.54583143 0.1:4])
 XPCA
 
 Standard deviations (1.3197231
 Petal.1543862
 
 Rotation (n x k) = (4 x 4):
 PC1 PC2 PC3 PC4
 Sepal.58202985 0. .59791083 -0..Width 0. p=4):
 [1] 2.2796596 0.4926162 0.17337266 -0. código en R • #Aplicando PCA
 XPCA=prcomp(iris[.

4798390
 Petal.Length 0. scale.1543862
 
 Rotation (n x k) = (4 x 4):
 PC1 PC2 PC3 PC4
 Sepal.1:4]. código en R • #Aplicando PCA
 XPCA=prcomp(iris[.65658877 0.Reducción de dimensionalidad.1:4])
 XPCA
 
 Standard deviations (1.3154872
 Sepal.4926162 0.2796596 0.07623608 -0..59791083 -0.36138659 -0.73016143 -0.. center = TRUE.7536574 • #Tambien es posible especificar si se centran y escalan los datos
 XPCA=prcomp(iris[.Length 0.0562689 0.3197231
 Petal.08452251 -0.54583143 0.85667061 0. p=4):
 [1] 2. = FALSE) #default .17337266 -0. . PCA.07548102 -0.58202985 0.Width 0.Width -0.35828920 0.

362909648 -0.] -2.1550386282 .210464272 0.0022624371
 [2.] 1.684125626 -0.390188862 0.319397247 0.Reducción de dimensionalidad.282660938 -0.177001225 0.027914828 0.0990265503
 …
 [150. código en R • XPCA$x #Obtener los datos transformados
 PC1 PC2 PC3 PC4
 [1. PCA.714141687 0.] -2.

59791083 -0.4798390
 Petal. PCA.36138659 -0.Length 0.684125626 -0.35828920 0.Reducción de dimensionalidad.] -2.Length 0.07623608 -0. código en R • XPCA$x #Obtener los datos transformados
 PC1 PC2 PC3 PC4
 [1.] 1.7536574 .362909648 -0.Width 0.Width -0.282660938 -0.0022624371
 [2.3197231
 Petal.027914828 0.714141687 0.319397247 0.07548102 -0.08452251 -0.] -2.3154872
 Sepal.85667061 0.54583143 0.390188862 0.210464272 0.0990265503
 …
 [150.58202985 0.65658877 0.17337266 -0.73016143 -0.177001225 0.1550386282 • XPCA$rotation #Vectores de transformación
 PC1 PC2 PC3 PC4
 Sepal.

58202985 0.714141687 0.Length 0.35828920 0.4798390
 Petal.07623608 -0.3197231
 Petal.65658877 0.2796596 0.390188862 0.1550386282 • XPCA$rotation #Vectores de transformación
 PC1 PC2 PC3 PC4
 Sepal.17337266 -0.36138659 -0. PCA.07548102 -0.Reducción de dimensionalidad.684125626 -0.0022624371
 [2.54583143 0.] -2.7536574 • XPCA$sdev #Raiz cuadrada de los pesos
 2.4926162 0.282660938 -0.Width -0.85667061 0.59791083 -0.027914828 0. código en R • XPCA$x #Obtener los datos transformados
 PC1 PC2 PC3 PC4
 [1.3154872
 Sepal.1543862 .0562689 0.73016143 -0.319397247 0.177001225 0.Width 0.Length 0.08452251 -0.0990265503
 …
 [150.] 1.362909648 -0.] -2.210464272 0.

PCA.02383509 0.percent cumulative.76852
 Dim.2 0.Reducción de dimensionalidad. código en R • #Instalando librería para graficar y ver los porcentajes de varianza explicada
 install.1 4.4618723 92.5212184 100.packages("factoextra")
 library(factoextra) • #obteniendo los porcentajes de varianza explicada
 get_eig(XPCA)
 
 eigenvalue variance.46187
 Dim.07820950 1.3066483 97.variance.47878
 Dim.4 0.7102610 99.22824171 92.24267075 5.00000 .percent
 Dim.3 0.

PCA.Reducción de dimensionalidad. 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 .

introducción • Los métodos jerárquicos pueden ser aglomerativos o divisivos.Métodos jerárquicos. en ambos casos un dendrograma es generado mostrando la secuencia de uniones o divisiones de los clusters. Aglomerativo Divisivo .

Mientras uno de los ejes muestra los puntos originales. dendrograma • Un dendrograma es un diagrama del tipo árbol que ilustra el proceso de generación de clusters producido por los algoritmos jerárquicos. el otro eje.Métodos jerárquicos. puede mostrar la distancia existente entre los clusters. 7 6 5 4 3 2 1 0 .

Luego. introducción • Método Jerárquico Divisivo: Comienza con todos los puntos como un solo cluster. 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. . en cada etapa.

. introducción • Método Jerárquico Aglomerativo (MJA): Comienza con todos los puntos como clusters individuales. Este proceso se repite hasta que se genera un solo gran cluster.Métodos jerárquicos aglomerativos. en cada etapa. Luego. se unen los cluster más cercanos entre si.

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.Métodos jerárquicos aglomerativos. . segmentan los datos en forma distinta.

... p1 p2 p3 p4 p5 . p1 p2 p3 p4 p9 p10 p11 p12 . ejemplo • Comencemos con cada punto siendo un cluster y se calcula la matriz de proximidad.Métodos jerárquicos aglomerativos. p1 p2 p3 p4 p5 ⋮ Matriz de Proximidad ..

1 1.0 C4 Matriz de Proximidad C1 C2 C5 .6 1.1 C4 0..2 C2 0.Métodos jerárquicos aglomerativos.0 0.0 0. p1 p2 p3 p4 p9 p10 p11 p12 .9 C3 C5 0.3 1. ejemplo • Después de unir ciertos clusters.0 1.7 1.5 0.0 0..4 C3 0. obtenemos C1 C2 C3 C4 C5 C1 0.2 0.

4 C3 0.0 1..2 C2 0..0 0.0 C4 Matriz de Proximidad C1 C2 C5 .0 0. ejemplo • Después de unir ciertos clusters. obtenemos • Buscamos los clusters más cercano C1 C2 C3 C4 C5 C1 0.5 0.9 C3 C5 0. p1 p2 p3 p4 p9 p10 p11 p12 .Métodos jerárquicos aglomerativos.6 1.1 1.2 0.7 1.1 C4 0.3 1.0 0.

0 C4 Matriz de Proximidad C1 C2 C5 .3 C2/C5 0. 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.7 C3 C4 0.0 ?? 0.Métodos jerárquicos aglomerativos..0 ?? ?? C3 0.6 1. p1 p2 p3 p4 p9 p10 p11 p12 .

.3 • Actualizar la matriz de proximidad C2/C5 0.7 C3 C4 0.Métodos jerárquicos aglomerativos.6 1.0 0.0 C4 Matriz de Proximidad C1 C2 C5 . 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..0 ?? ?? C3 0. p1 p2 p3 p4 p9 p10 p11 p12 .

0 ?? 0. ejemplo la distancia entre clusters? • Después de unir ciertos clusters.0 C4 Matriz de Proximidad C1 C2 C5 ..3 • Actualizar la matriz de proximidad C2/C5 0.0 0. obtenemos • Buscamos los clusters más cercano • Unimos los clusters más cercano C1 C2/C5 C3 C4 C1 0.7 C3 C4 0.. p1 p2 p3 p4 p9 p10 p11 p12 .6 1.0 ?? ?? C3 0.¿Cómo podemos actualizar Métodos jerárquicos aglomerativos.

D(Ci .Métodos jerárquicos aglomerativos. Cj ) = min{d(x. y 2 Cj } . single linkage • Single linkage: La distancia entre clusters esta determinada por los puntos más similares (cercanos) entre los clusters. y)|x 2 Ci .

y 2 Cj } • Ventaja:
 Genera cluster largos y delgados • Limitación:
 Afectado por los datos atípicos . D(Ci . single linkage • Single linkage: La distancia entre clusters esta determinada por los puntos más similares (cercanos) entre los clusters.Métodos jerárquicos aglomerativos. Cj ) = min{d(x. y)|x 2 Ci .

y)|x 2 Ci . complete linkage • Complete linkage: La distancia entre clusters esta determinada por los puntos más disimiles (lejanos) entre los clusters. y 2 Cj } .Métodos jerárquicos aglomerativos. Cj ) = max{d(x. D(Ci .

complete linkage • Complete linkage: La distancia entre clusters esta determinada por los puntos más disimiles (lejanos) entre los clusters. y 2 Cj } • Ventaja:
 Menos susceptible a datos atípicos • Limitación:
 -Tiende a quebrar cluster grandes
 -Sesgado a generar clusters circulares . y)|x 2 Ci . Cj ) = max{d(x.Métodos jerárquicos aglomerativos. D(Ci .

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 . 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 . Cj ) = avg{d(x. y)|x 2 Ci .

15 2 0.05 4 0 3 6 2 5 4 1 Datos originales Single linkage .Métodos jerárquicos aglomerativos.2 5 0.1 3 6 0. ejemplos 1 0.

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

15 0.25 2 0.3 5 0.35 0. 0.05 0 3 6 4 1 2 5 Original data Complete linkage .2 3 6 0. existen tantos posibles cluster como uniones posibles (el número de datos existentes) • Como regla básica.1 4 0.Métodos jerárquicos aglomerativos.4 1 0. los posibles clusters se determinan por uniones de clusters distantes entre ellas. determinando el número de clusters • A pesar de que el dendrograma muestra toda la información de los clusters generados.

35 0. existen tantos posibles cluster como uniones posibles (el número de datos existentes) • Como regla básica.25 2 0.05 0 3 6 4 1 2 5 Original data Complete linkage .Métodos jerárquicos aglomerativos.15 0. 0.3 5 0. determinando el número de clusters • A pesar de que el dendrograma muestra toda la información de los clusters generados. los posibles clusters se determinan por uniones de clusters distantes entre ellas.2 3 6 0.4 1 0.1 4 0.

“euclidean”)
 #Luego aplicamos el modelo 
 
 model = hclust(d. código en R • #Apliquemos un algoritmo jerárquico
 #Primero tenemos que calcular la matriz de distancia entre los puntos
 d = dist(iris[. “average”
 
 model 
 Call:
 hclust(d = d. method=“single”) 
 #otros tipos de distancia entre clusters: “complete”.1:4]) #en forma equivalente d = dist(iris[.1:4]. method = "single")
 Cluster method : single
 Distance : euclidean
 Number of objects: 150 .Métodos jerárquicos aglomerativos.

xlab="puntos".cex.cex.main=1. ylab="distancia". main="Dendrograma".Métodos jerárquicos aglomerativos. código en R • #Graficando el dendrograma
 plot(model.3)
 
 .5.lab=1.5.axis=1.cex.

aes(Sepal.Length.Width.Length.Width. Sepal.title=element_text(size=18))
 ggplot(iris.axis.axis. color = groups)) + geom_point() + theme(axis. k=2)
 #visualizando los cluster generados
 library(ggplot2)
 ggplot(iris.text=element_text(size=12). aes(Petal.cutree(model. Petal.title=element_text(size=18))
 
 .text=element_text(size=12).Métodos jerárquicos aglomerativos. color = groups)) + geom_point() + theme(axis. código en R • #Generando dos clusters
 groups <.

xlab="puntos".axis=1.5. ylab="distancia". border="black")
 
 .3)
 rect.main=1.cex. k=2. main="Dendrograma".5.hclust(model.cex. código en R • #visualizando los cluster generados en el dendrograma
 plot(model.lab=1.cex.Métodos jerárquicos aglomerativos.

Métodos jerárquicos aglomerativos. ejemplo .

ejemplo .Métodos jerárquicos aglomerativos.

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 .

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.


 -bacon
 317 propiedades distintas.Métodos jerárquicos aglomerativos.
 -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
 . ejemplo • A estudiantes le pedieron describir solo mencionando propiedades los siguientes conceptos:
 -arm
 • 2625 propiedades fueron mencionadas.


 -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 . ejemplo • A estudiantes le pedieron describir solo mencionando propiedades los siguientes conceptos:
 -arm
 • 2625 propiedades fueron mencionadas.Métodos jerárquicos aglomerativos.
 -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? .
 -bacon
 317 propiedades distintas. ejemplo • A estudiantes le pedieron describir solo mencionando propiedades los siguientes conceptos:
 -arm
 • 2625 propiedades fueron mencionadas.Métodos jerárquicos aglomerativos.

Métodos jerárquicos aglomerativos.
 -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? . 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.

clustering. agglomerative. HM.DM. example .

DM. example . clustering. HM. agglomerative.

DM, clustering, HM, agglomerative, example

DM, clustering, HM, agglomerative, example

DM, clustering, HM, agglomerative, example

HM. example .DM. clustering. agglomerative.

example .DM. clustering. HM. agglomerative.

datos categóricos • En el caso de datos categóricos hay que utilizar la disimilaridad de Gower. • 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 . que se encuentra en la librería cluster.Métodos jerárquicos aglomerativos.

• #Cargando librerías
 install.packages("cluster")
 library(cluster)
 
 #Seleccionando datos categóricos y transformándolos a factor
 data=mtcars[. que se encuentra en la librería cluster.Métodos jerárquicos aglomerativos. datos categóricos • En el caso de datos categóricos hay que utilizar la disimilaridad de Gower.factor(data[. method="complete")
 plot(model) .i]=as.c(2.8:11)]
 for (i in 1:5){
 data[.i])
 }
 
 #Generando matriz de distancia y clusterizando
 d=daisy(data)
 model = hclust(d.

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. 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. 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). (membresía) K-Medias . Fuzzy C-medias • Fuzzy C-means (FCM) permite que cada punto pertenezca a más de un cluster.Métodos difusos. cada cluster es asociado con un centroide y cada punto es asignado a uno o más clusters según una medida de similaridad.

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. (membresía) (membresía) K-Medias Fuzzy C-medias . Dado un número de clusters K (determinado por el usuario). Fuzzy C-medias • Fuzzy C-means (FCM) permite que cada punto pertenezca a más de un cluster.

Fuzzy C-medias.Métodos difusos. rk ) k=1 k=1 x(i)2Ck . 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).

. 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. Fuzzy C-medias. tal que X K uij = 1. . .Métodos difusos. n i=1 . . 8j = 1.

. .Métodos difusos. En el límite m=1. . tal que X K uij = 1. rk ) k=1 k=1 x(i)2Ck • U es una matriz de pertenencia/peso con valores entre 0 y 1. y por lo tanto cluster más difusos. Fuzzy C-medias. Un m muy grande genera pertenencias pequeñas (uij). obteniendo el algoritmo de K-medias . . 8j = 1. todos los valores uij convergen a 0 o 1. n i=1 • m ∈ [1. 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). ∞) es un difusor que determina que tan difusos serán los clusters.

. . x(j)) • Paso 5: Ir al Paso 2 d(rk . 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). x(j)) k=1 . tal que
 uij = 1. . Fuzzy C-medias. 
 1 • Paso 4: Re-calcular la matriz U con uij = K ✓ X ◆2/(m 1) d(ri . algoritmo K X • Paso 1: Generar U en forma aleatoria. parar el algoritmo. 8j = 1. .Métodos difusos. Si el costo que se obtiene aumenta o es menor a un límite (definido por el usuario).

código en R • #Apliquemos C-medias con 3 clusters
 install.00
 2 0.98 0. 1
 
 Membership degree matrix (rounded): 
 Clus 1 Clus 2 Clus 3
 1 0. 150
 2 2 2 2 2 2 2 2 2 2 2 2 2 ….01 0.03 0.00 1.98 0.00 0.58 0.packages(“fclust”)
 library(fclust)
 model = FKM(iris[1:4].Métodos difusos.02 0.01
 …
 150 0.01
 3 0. Fuzzy C-medias.39 . 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 ….

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.


 pca => Estandarización de los datos y aplicación de Principal Component Analysis para una mejor visualización de los datos .
 ucex => El tamaño del punto indica la pertenencia del cluster.2). ucex=TRUE. Fuzzy C-medias. v1v2=c(1. pca=FALSE)
 v1v2 => Variable a imprimir.Métodos difusos. código en R • #Veamos un plot de los cluster encontrados
 plot(model.

Métodos difusos. pca=TRUE)
 . código en R • #Veamos un plot de los cluster encontrados
 plot(model. v1v2=c(1. Fuzzy C-medias.2). ucex=TRUE.

código en R • #Apliquemos C-medias con 3 clusters
 model = FKM(iris[1:4]. m=4. 3. maxit=100) .001. stand=1. m=4. 3. m=4) • #C-medias: 5 puntos de partida aleatorios
 model = FKM(iris[1:4].001) • #C-medias: fijando número máximo de iteraciones 
 model = FKM(iris[1:4]. stand=1.Métodos difusos. 3) • #C-medias: difusor igual a 4 (parámetro m)
 model = FKM(iris[1:4]. m=4. Fuzzy C-medias. conv=0. 3. RS=5. m=4. RS=5. stand=1) • #C-medias: fijando limite de convergencia
 model = FKM(iris[1:4]. RS=5. 3. conv=0. 3. RS=5) • #C-medias: estandarizando los datos
 model = FKM(iris[1:4].

Fuzzy C-medias. ejemplo m=10 m=1.1 .Métodos difusos.

∑k) 
 K X K X K X p(x) = p(k)p(x|k) = p(k)p(x|x ⇠ N (µk . ⌃k ) k=1 k=1 k=1 . Métodos difusos. ⌃k )) = ⇡k N (µk . donde cada componente tiene parámetros: Nk(μk. 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.

Xp ) ⌃=4 ··· ··· ··· 5 Cov(X1 . Xp ) ··· V ar(Xp ) ✓ ◆ 1 1 p(x) = p(x1 . . para datos con p dimensiones se define como: x ⇠ N (µ. ⌃) donde µ = (E[X1 ]. GMM. . Métodos difusos. . . Gaussiana multidimensional • Una Gaussiana multidimensional. E[Xp ]) 2 3 V ar(X1 ) ··· Cov(X1 . · · · . xp ) = p exp (x µ)T ⌃ 1 (x µ) (2⇡)p |⌃| 2 .

GMM.Métodos difusos. 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 .

se obtiene que el logaritmo de la verosimilitud de los datos ! es: YN ln P (D|⇡. ⌃k )) i=1 k=1 . µ.Métodos difusos. ⌃) = ln p(xi |M ) i=1 N X = ln p(xi |M ) i=1 N "K # X X = ln ⇡k N (µk . aprendizaje • ¿Cómo podemos aprender los parámetros? K X p(x) = ⇡k N (µk . GMM. ⌃k ) k=1 • Aplicando el método de la maxima verosimilitud (maximum likelihood).

aprendizaje • ¿Cómo podemos aprender los parámetros? K X p(x) = ⇡k N (µk . µ. ⌃) =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 . se obtiene que el logaritmo de la verosimilitud de los datos ! es: una ln P solución (D|⇡.Métodos difusos. no existe • Aplicando el método de la maxima verosimilitud (maximum likelihood). ⌃k ) k=1 lamentablemente. ⌃k )) i=1 k=1 . GMM.

⌃k ) > > K … > > Y > > p(x . también se puede trabajar con la distribución conjunta p(x.z) . ⌃k ) k=1 k=1 • Hemos llegado a la misma expresión anterior pero con una nueva variable. z ) = ⇡ zik N (x |µ . donde zij=1 implica que xi fue generada por la distribución normal j. GMM.Métodos difusos. aprendizaje • Si asumimos que dado el punto xi se conoce el valor de una nueva variable z. • Sin embargo. ⌃ ) 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 . 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 )znk n=1 k=1 N X X K ln p(D. Z|⇡. GMM. ⌃) = znk (ln ⇡k + ln N (xn |µk . ⌃) = ⇡kznk N (xn |µk . µ.Métodos difusos. z|⇡. µ. aprendizaje • Considerando que " K # X ln p(x|⇡. µ. µ. ⌃k )) n=1 k=1 . Z|⇡. ⌃) k=1 • Podemos calcular el log likelihood de p(D.Z)
 N Y Y K p(D. ⌃) = ln p(x.

Z)
 N Y Y K p(D.Métodos difusos. µ. ⌃k )) n=1 k=1 • Obteniendo las siguientes soluciones (máxima verosimilitud) 1 Cada distribución normal puede ser ⇡k = znk N (µk . ⌃) = ⇡kznk N (xn |µk . ⌃) = znk (ln ⇡k + ln N (xn |µk . z|⇡. aprendizaje • Considerando que " K # X ln p(x|⇡. ⌃k )znk n=1 k=1 N X X K ln p(D. GMM. µ. ⌃k ) calculada usando solo los puntos N que pertenecen al cluster k. Z|⇡. µ. ⌃) = ln p(x. µ. Z|⇡. . ⌃) k=1 • Podemos calcular el log likelihood de p(D.

Z|⇡. ⌃) = ln p(x.Métodos difusos. ⌃) k=1 • Podemos calcular el log likelihood de p(D. ⌃) = n=1 k=1 ⇡kznk N (xn |µk .es ⌃) =desconocido XX N K ln p(D. aprendizaje • Considerando que " K # X ln p(x|⇡. ⌃k ) calculada usando solo los puntos N que pertenecen al cluster k. 
 p(D. ⌃ )) 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 . µ. GMM. . Z|⇡. µ. µ. ⌃k )znk Z µ. z (ln ⇡ + ln N (x |µ .Z)
 N Y Y K Desafortunadamente. z|⇡.

GMM.∑k) con respecto a las K distribuciones normales posibles. ⌃k ) E[znk ] = PK j=1 ⇡j N (xn |µj . maximiza el valor esperado del log likelihood con respecto a Z N X X K EZ [ln p(D. el cual. Z|⇡. ⌃k )) n=1 k=1 ⇡k N (xn |µk . ⌃j ) • E[znk] es la probabilidad de que el punto n sea generado por el cluster k (N(𝞵k. aprendizaje • Podemos utilizar el algoritmo de Expectation-Maximization. .Métodos difusos. µ. ⌃)] = E[znk ](ln ⇡k + ln N (xn |µk .

E-step: estimar todos los
 E[znk ] = P K 
 j=1 ⇡j N (xn |µj . M-step: maximizarE
 Z [ln p(D. ⌃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. ⌃)] = E[znk ](ln ⇡k + ln N (xn |µk . Elegir valores iniciales para 𝞹 𝞵k ∑k ⇡k N (xn |µk . ⌃k ) 2. ⌃j ) N X X K 3. Z|⇡. aprendizaje • Algoritmo 1. GMM. si la convergencia no es satisfecha ir al paso 2.Métodos difusos. µ. Verificar convergencia de los parámetros. .

Métodos difusos. ejemplo datos flor de iris . GMM.

ejemplo datos flor de iris . GMM.Métodos difusos.

GMM. ejemplo datos flor de iris .Métodos difusos.

5522 -566.074 150 38 -562. equal shape) model with 3 components:
 log. 3) 
 summary(model)
 ----------------------------------------------------
 Gaussian finite mixture model fitted by EM algorithm 
 ----------------------------------------------------
 
 Mclust VEV (ellipsoidal. GMM.4673
 
 Clustering table:
 1 2 3
 50 45 55 . código en R • #Apliquemos GMM con 3 clusters
 install.likelihood n df BIC ICL
 -186.Métodos difusos.packages(“mclust”)
 library(mclust)
 model = Mclust(iris[1:4].

forma. volumen. 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.Métodos difusos. 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
 . GMM.

Métodos difusos. 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 . GMM.

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
 .

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.

Métodos difusos. código en R • #Graficando los modelos aprendidos
 plot(model)
 Model-based clustering plots: 
 1: BIC
 2: classification
 3: uncertainty
 4: density
 . GMM.

Necesitamos balancear entre la simplicidad del modelo (bajo K) y que tan bien se modelan los datos (bajo likelihood). GMM. seleccionando K • Como seleccionar K? • Un modelo más complejo (mayor K) siempre minimiza el likelihood.Métodos difusos. • Es necesario penalizar la complejidad del modelo. .

en el likelihood de los datos (L). • 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). Necesitamos balancear entre la simplicidad del modelo (bajo K) y que tan bien se modelan los datos (bajo likelihood). normalmente.
 El error esta basado. seleccionando K • Como seleccionar K? • Un modelo más complejo (mayor K) siempre minimiza el likelihood. GMM. • BIC (Bayesian information criterion): ScoreBIC = -2 log L + p log n .Métodos difusos. • Es necesario penalizar la complejidad del modelo.

Métodos difusos.2 
 -561.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.5522 -574.0178 • El mejor modelo corresponde a 2 Gaussianas con varianza modelada a través de VEV
 .7285 -562.2 VEV. seleccionando K • #Entrenemos el modelo con multiples K
 model = Mclust(iris[1:4].3 VVV. GMM.

GMM.Métodos difusos. 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 .

9 0.Evaluación • ¿Como podemos evaluar que tan bueno es un cluster? 1 • Esto nos ayudaría a: 0.4 0.6 0.2 0.4 0.8 1 x Puntos aleatorios .3 • Comparar dos conjuntos de clusters 0.8 • Evitar encontrar cluster en datos de ruido.2 0. 0.5 y 0.6 • Comparar algoritmos de clustering 0.7 0.1 0 0 0.

2 0. 0.4 0.6 0.8 1 0 0 0.2 0.1 0.3 0.9 0.6 0.5 y 0.6 • Comparar algoritmos de clustering 0.8 0.7 0.4 0.6 0.9 0.8 1 x Puntos aleatorios 1 1 1 0.2 0.6 0.1 0 0 0.3 0.6 0.4 0.1 0.3 • Comparar dos conjuntos de clusters 0.7 0.5 0.3 0.4 0.4 0.9 0.8 0.7 0.9 0.4 0.8 0.7 0.2 0. Evaluación • ¿Como podemos evaluar que tan bueno es un cluster? 1 • Esto nos ayudaría a: 0.5 y 0.2 0.6 0.2 0.6 0.5 y y 0.8 • Evitar encontrar cluster en datos de ruido.2 0.8 1 0 0.2 0.8 1 x x K-medias DBSCAN Complete x Link .4 0.4 0.1 0 0 0 0.

• Evaluar si los clusters “se ajustan” a los datos (no supervisado). • Dado multiples clusterizaciones de los datos. enfoques: • Determinar la tendencia de clusters en los datos. • Determinar el número “correcto” de clusters. distinguir si realmente existen estructurar no aleatorias en los datos. • Evaluar clusters conociendo la etiqueta de clase (supervisados).Evaluación • Evaluación de cluster. es decir. determinar cual de ellos representa mejor la estructura de los datos. .

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).Evaluación. es usar un test estadístico de aleatoriedad espacial.

antes de realizar el clustering. tendencia de clusters • Tendencia de clusters: evalúa si existe la presencia de clusters en los datos. es usar un test estadístico de aleatoriedad espacial.Evaluación. i=1 i=1 . y generar p datos aleatorios en el mismo espacio p X wi wi: distancia del punto aleatorio i. • Estadístico de Hopkins: Tomar una muestra aleatoria de p puntos desde los datos. 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. a su vecino más cercano de los puntos originales. • Enfoque más común (para datos numéricos con pocas dimensiones).

tendencia de clusters • Tendencia de clusters: evalúa si existe la presencia de clusters en los datos. i=1 i=1 • Valor cercano a 0.0 indica datos uniformemente distribuidos. a su vecino ui + wi más cercano de los puntos originales.5 indica datos aleatorios. es usar un test estadístico de aleatoriedad espacial.
 Valor cercano a 0. y generar p datos aleatorios en el mismo espacio p X wi wi: distancia del punto aleatorio i.Evaluación. a su vecino más cercano de los puntos originales.
 Valor cercano a 1. i=1 H= p p X X ui: distancia del punto original i. antes de realizar el clustering. . • Enfoque más común (para datos numéricos con pocas dimensiones). • Estadístico de Hopkins: Tomar una muestra aleatoria de p puntos desde los datos.0 indica datos altamente clusterizados.

8191
 H=0. estadístico de Hopkins.4975
 p=50 p=50 . tendencia de clusters.Evaluación. ejemplo H=0.

n = 30.1:4]. estadístico de Hopkins. graph = FALSE)
 #El paquete devuelve 1 menos el valor del estadístico
 1-res$hopkins_stat
 0.packages("factoextra")
 library(factoextra)
 #Calculando el estadístico de Hopkins
 res = get_clust_tendency(iris[.Evaluación. tendencia de clusters.830 . código en R • #Cargando paquete 
 install.

graph = FALSE)
 1-res$hopkins_stat
 0. nrow = 150.1:4].i] = runif(150.i]))
 }
 #Calculando el estadístico de Hopkins
 res = get_clust_tendency(dataRandom. graph = FALSE)
 #El paquete devuelve 1 menos el valor del estadístico
 1-res$hopkins_stat
 0. ncol = 4)
 for (i in 1:4){
 dataRandom[.830 • #Generando datos aleatorios
 dataRandom = matrix(0. código en R • #Cargando paquete 
 install.i]).477
 . n = 30.max(iris[. tendencia de clusters.Evaluación. n = 30.packages("factoextra")
 library(factoextra)
 #Calculando el estadístico de Hopkins
 res = get_clust_tendency(iris[. estadístico de Hopkins.min(iris[.

evaluación no supervisada • Evaluación no supervisada: mide el ajuste de los cluster en los datos que no tienen etiquetas/clases. y Coeficiente de Silhouette. • Existen diversos enfoques en la evaluación no supervisada: • Inspección visual de la matriz de proximidad • Medidas internas: Cohesión. 
 .Evaluación. Separación.

evaluación no supervisada. visual • Calcular la matriz de proximidad (distancia) entre los puntos. • Inspeccionar en forma visual (un buen clustering exhibe claros patrones de bloques) . • Ordenar la matrix de proximidad según la etiqueta de los clusters.Evaluación.

Evaluación. visual • Calcular la matriz de proximidad (distancia) entre los puntos. • Ordenar la matrix de proximidad según la etiqueta de los clusters. evaluación no supervisada. • Inspeccionar en forma visual (un buen clustering exhibe claros patrones de bloques) .

• Ordenar la matrix de proximidad según la etiqueta de los clusters. visual • Calcular la matriz de proximidad (distancia) entre los puntos.Evaluación. • Inspeccionar en forma visual (un buen clustering exhibe claros patrones de bloques) . evaluación no supervisada.

• Ordenar la matrix de proximidad según la etiqueta de los clusters. • Inspeccionar en forma visual (un buen clustering exhibe claros patrones de bloques) . visual • Calcular la matriz de proximidad (distancia) entre los puntos. evaluación no supervisada.Evaluación.

matrix(dist(data))
 
 #Ordenando columnas según clusters
 index=which(model$cluster==1)
 for (i in 2:K){
 index=c(index. evaluación no supervisada.which(model$cluster==i))
 }
 tempDist=tempDist[index.Evaluación. código en R • #Generando matriz de disimilaridad 
 K=3
 data=iris[. visual. K)
 tempDist=as.1:4] 
 model = kmeans(data.index]
 
 #Graficando la matriz
 library(lattice)
 levelplot(tempDist) .

código en R Matriz de disimilaridad 
 Matriz de disimilaridad 
 para datos iris para datos aleatorios . evaluación no supervisada.Evaluación. visual.

K X X SSEtotal = (x C i )2 cohesión k=1 x2Ck . 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. medidas internas.Evaluación. evaluación no supervisada.

Evaluación. medidas internas. 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 + (5 4.5)2 + (4 4.5)2 = 1 . cohesión • Cohesión: Mide que tan cercanos están los objetos dentro de cada cluster. evaluación no supervisada.5)2 + (2 1. • Suma de errores cuadrados (SSE) es la suma de la distancia al cuadrado de un punto al centroide de su cluster.

evaluación no supervisada. medidas internas. Evaluación. 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 .

5 3) = 9 .5 3) + 2 ⇤ (4. medidas internas. separación • Separación: Mide que tan distinto son los clusters con respecto a los otros. evaluación no supervisada. Evaluación. 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. • Suma cuadrada entre grupos (SSB) es la suma de la distancia al cuadrado de un centroide a la media de todos los datos.

5)2 + (4 4. • Entonces minimizar cohesión es equivalente a maximizar separación.5 3)2 + 2 ⇤ (4.5)2 + (5 4. evaluación no supervisada. medidas internas.5 3)2 = 9 .5)2 + (2 1. 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.5)2 = 1 K=2 ) SSBtotal = 2 ⇤ (1. Evaluació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.

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

nstart=5) . cohesión y separación.packages("flexclust")
 library(flexclust) • #Aplicando K-means a datos Iris
 K=3
 model = kmeans(iris[. código en R • #Instalando paquetes para calcular distancia de un punto a otros
 install. medidas internas.1:4].K.Evaluación. evaluación no supervisada.

colMeans(tempData))^2)
 }
 cohesion = sum(withinCluster)
 cohesion
 78. código en R • #Instalando paquetes para calcular distancia de un punto a otros
 install. cohesión y separación.Evaluación.packages("flexclust")
 library(flexclust) • #Aplicando K-means a datos Iris
 K=3
 model = kmeans(iris[.K. evaluación no supervisada.85 . medidas internas.1:4]
 #Calculando distancia del centro del cluster al resto de los puntos
 withinCluster[i]=sum(dist2(tempData.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].

cohesión y separación.52 . código en R • #Centro de los datos
 meanData=colMeans(iris[.Evaluación. medidas internas. evaluación no supervisada.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.

evaluación no supervisada.1:4].1:4])
 #Calculando separación
 SSB=numeric(K)
 for (i in 1:K){
 #Seleccionando datos pertenecientes al cluster
 tempData=iris[which(model$cluster==i).85 .meanData)^2)
 totalSum
 681. código en R • #Centro de los datos
 meanData=colMeans(iris[.52 • #Distancia de todos los puntos al medio
 totalSum=sum(dist2(iris[.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.37 = 602.Evaluación.52 + 78. medidas internas. cohesión y separación.

K.3932
 sum(SSBRandom)
 397.]
 withinClusterRandom[i]=sum(dist2(tempData.966 . evaluación no supervisada.colMeans(tempData))^2)
 SSBRandom[i]=nrow(tempData)*sum((meanDataRandom- colMeans(tempData))^2)
 }
 sum(withinClusterRandom)
 321.Evaluación.nstart=5)
 meanDataRandom=colMeans(dataRandom)
 withinClusterRandom=numeric(K)
 SSBRandom=numeric(K)
 for (i in 1:K){
 tempData=dataRandom[which(model$cluster==i). medidas internas. cohesión y separación.5727
 
 Fijarse que la suma es similar 718. código en R • #Comparemos con los datos aleatorios (dataRandom)
 model = kmeans(dataRandom.

• Calcular bij. coeficiente de silhouette (silueta) • El coeficiente de Silhouette combina cohesión y separación. la distancia promedio del punto i a los puntos del mismo cluster. • Para cada punto i: • Calcular ai.Evaluación. el mínimo bij tal que i no pertenezca al cluster j. con valores cercanos a 1 indicando una mejor clusterización. medidas internas. evaluación no supervisada. la distancia promedio del punto i a todos los puntos del cluster j. varia entre [-1.1].bi) . Normalmente. • Calcular bi. • 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. • Para cada punto i: • Calcular ai. . el mínimo bij tal que i no pertenezca al cluster j. Si ai es cercano a 0 (baja cohesión). la distancia promedio del punto i a todos los puntos del cluster j.1].Evaluación. coeficiente de silhouette (silueta) • El coeficiente de Silhouette combina cohesión y separación. varia entre [-1. la distancia promedio del punto i a los puntos del mismo cluster. • El coeficiente de Silhouette para el punto i es Si = (bi-ai) / max(ai. • El coeficiente de silhouette general es el promedio de los coeficientes de silhouette de todos los puntos. medidas internas. evaluación no supervisada. entonces Si es cercano a 1. • Calcular bi. • Calcular bij. que a su propio cluster. • El coeficiente de silhouette de un cluster es el promedio de los coeficientes de silhouette de los puntos pertenecientes al cluster. Normalmente. con valores cercanos a 1 indicando una mejor clusterización.


 bi => el mínimo bij tal que i no pertenezca al cluster j. evaluación no supervisada.
 bij => la distancia promedio del punto i a todos los puntos del cluster j.
 El coeficiente de Silhouette para el punto i es Si = (bi-ai) / max(ai. coeficiente de silhouette.bi) C2 × × 1 C1 2 3 4 5 ai bi1 bi2 bi si 1 — 2 — 3 — 5 — . ejemplo • ai => la distancia promedio del punto i a los puntos del mismo cluster.Evaluación. medidas internas.

5 -0.0 — 3.0 1/2 3 2. coeficiente de silhouette.0 3.0 2.
 bij => la distancia promedio del punto i a todos los puntos del cluster j.0 3. evaluación no supervisada.0 — 2.5/2 .
 El coeficiente de Silhouette para el punto i es Si = (bi-ai) / max(ai.
 bi => el mínimo bij tal que i no pertenezca al cluster j.5/2 5 2.5 — 1. ejemplo • ai => la distancia promedio del punto i a los puntos del mismo cluster.0 2/3 2 1.0 1.bi) C2 × × 1 C1 2 3 4 5 ai bi1 bi2 bi si 1 1.5 — 3. medidas internas.5 1.Evaluación.

0 1.5 — 2.
 bi => el mínimo bij tal que i no pertenezca al cluster j.0 3.0 3.5 — 4.0 2.
 El coeficiente de Silhouette para el punto i es Si = (bi-ai) / max(ai.0 2/3 3 1. evaluación no supervisada.0 4.bi) C1 C2 × × 1 2 3 4 5 ai bi1 bi2 bi si 1 1.5/2 5 0.
 bij => la distancia promedio del punto i a todos los puntos del cluster j.0 0.0 2. medidas internas.5/4 2 1.0 .0 — 3.Evaluación. coeficiente de silhouette. ejemplo • ai => la distancia promedio del punto i a los puntos del mismo cluster.0 — 3.

] 3 1 0.1:4].dist(iris[. código en R • #Instalando paquetes para calcular distancia de un punto a otros
 install.Evaluación.K.nstart=5) • #Calculando coeficiente de silhouette
 coefSil=silhouette(model$cluster. coeficiente de silhouette.] 3 1 0. evaluación no supervisada.85295506
 [2.] 3 1 0.18544229 .packages("cluster")
 library(cluster) • #Aplicando K-means a datos Iris
 K=3
 model = kmeans(iris[.81549476
 …
 [150.1:4]))
 coefSil
 cluster neighbor sil_width
 [1. medidas internas.

coeficiente de silhouette.56231 0. 1st Qu. dist = dist(iris[.7981405 
 Individual silhouette widths:
 Min.39115 0.default(x = model$cluster.02636 0. medidas internas.85391 . evaluación no supervisada. 
 0.4173199 0. Median Mean 3rd Qu.77552 0.4511051 0.Evaluación. Max. 1:4])) :
 Cluster sizes and average silhouette widths:
 62 38 50 
 0.55282 0. código en R • #Visualizando los valores por clusters
 summary(coefSil)
 Silhouette of 150 units in 3 clusters from 
 silhouette.

medidas internas. evaluación no supervisada. código en R • #Visualización gráfica
 plot(coefSil. coeficiente de silhouette. "green". "blue"))
 . col = c("red".Evaluación.

"blue"))
 . medidas internas. col = c("red". evaluación no supervisada. código en R • #Visualización gráfica datos aleatorios
 plot(silhouette(model$cluster. "green".Evaluación.dist(dataRandom)). coeficiente de silhouette.

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

3])
 } . código en R • #Calculemos los valores del coeficiente de Silhouette
 coefSil=numeric(10)
 for (k in 2:10){
 model = kmeans(iris[1:4].1:4]))
 coefSil[k]=mean(temp[.dist(iris[.Evaluación. k)
 temp = silhouette(model$cluster. 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].3])
 } . determinar K.Evaluación. k)
 temp = silhouette(model$cluster.1:4]))
 coefSil[k]=mean(temp[.dist(iris[.

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