Bien, en esta entrada hablaré acerca de algunas de las
técnicas de discriminantes que existen. Debo aclarar que este es uno de los temas en donde se encuentra más
teoría que práctica en la web, haciendo realmente en ocasiones difícil de entender la idea
general (en la mayoría de los casos se encontraran con varias fórmulas sin un
ejemplo concreto de su utilización u explicación de las variables que la
forman). El motivo de esto, quiero suponer, es porque este tipo de
clasificadores se basan en una idea en general, que es la de discriminar a las
clases, más que a un algoritmo en particular.
La idea general de este tipo de clasificadores es, una
vez teniendo conocimiento de nuestros datos, intentar crear un modelo que nos permita
separar a nuestra clases, usualmente este modelo es una recta (discriminantes
lineales), una curva (discriminantes no lineales) , un circulo (ídem) etc.
Por ejemplo supongamos que tenemos la gráfica de dos dimensiones
de alguna tabla de una base y que las mismas se ven de la siguiente manera:
Bien, si quisiéramos diferenciar a los círculos verdes de
los azules, podríamos trazar un círculo y diríamos que todo lo que este dentro
del círculo es azul y fuera del mismo es verde:
Claro, es un poco raro encontrarse con este tipo de
distribuciones, usualmente nos encontraremos con datos de la siguiente manera
(al menos cuando sigan una distribución Gaussiana):
Para este tipo de datos basta con trazar una línea (ese será
nuestro modelo o discriminante) para diferenciar a nuestros datos:
Pero en la práctica, tendremos bases de datos con más
de tres atributos, lo cual indica que no podremos visualizarlos en una gráfica
y entonces no podremos colocar nuestro discriminante de forma manual, es aquí
en donde entran los métodos desarrollados para este tipo de casos.
En esta entrada solo me basaré en los discriminantes más
utilizados, los lineales(son los más utilizados por que sirven para discriminar
poblaciones que siguen una Gaussiana).
Bien existen muchas técnicas para poder trazar una o varias líneas que
nos puedan separar a nuestros datos, entre ellas tenemos algunos métodos que son
parecidos al siguiente algoritmo:
Elegir un modelo
aleatorio L
Para cada elemento “a”
de una población ” A” hacer
Si el modelo L NO clasifica bien
al elemento “a” entonces
Modificar el
modelo L para que pueda clasificar al elemento a
Termina Si
Termina Para
Salida el modelo L
Si, lo se, es un poco burdo el algoritmo, pero es la idea básica de
cómo funcionan la mayoría de los métodos que se encontrarán, claro el problema
principal está en modificar el modelo para que pueda clasificar bien a la
entrada que se le está dando.
Pero los discriminantes lineales no son tan ciegos y existen
varias técnicas que nos permiten escoger (algunas de ellas mediante modelos
estadísticos) la línea (o el plano si es
que hablamos de más de dos atributos) con una simple fórmula, ejemplos de esto
es el discriminante de Fisher y la máquina de soporte de vectores.
Bien enfocaremos nuestra energía en el discriminante de
Fisher.
Este discriminante es muy poderoso, se usa entre otras cosas
en imágenes, sistemas de información médica y un sin fin de cosas. Utiliza
información de variables estadísticas para poder trazar el modelo que nos
servirá para discriminar nuestras clases. Su regla de clasificación es la
siguiente:
Clasifica al grupo 1 si:
W'X() < W'((VectorMediasClase1 +
VectorMediasClase2) / 2 )
En donde:
- W= Sw-1 (VectorMediasClase1 - VectorMediasClase2);
- W’ = transpuesta de W
- Sw = ((n1 -1) / n1 + n2 -2) S1 + ((n1 -1) / n1 + n2 -2 ) S2
- S1 , S2 = Matriz de covarianzas para la clase 1 y la clase 2
- n1,n2 = cantidad de elementos de la clase 1 y cantidad de elementos de la clase 2
Cabe mencionar que a Sw se le
conoce como matriz de intra-grupos
combinada
Pues bien manos a la obra.
Para el ejemplo clasificaré a
la base de datos iris, en particular clasificaré las clases versicolor y
setosa. Primero debo de obtener su vector de medias para cada uno, esta base de
datos cuenta con 4 atributos, entonces
los vectores de medias quedan de la siguiente manera:
VectorMedias Setosa
|
5.0059999999999993
|
3.4180000000000006
|
1.464
|
0.24399999999999991
|
VectorMediasVersicolor
|
5.936
|
2.7700000000000005
|
4.26
|
1.3259999999999998
|
Ahora obtendremos la matriz
de covarianzas para setosa (S1):
0.12424898
|
0.10029796
|
0.01613878
|
0.01054694
|
0.10029796
|
0.14517959
|
0.01168163
|
0.01143673
|
0.01613878
|
0.01168163
|
0.03010612
|
0.00569796
|
0.01054694
|
0.01143673
|
0.00569796
|
0.01149388
|
Y para versicolor (S2):
0.12424898
|
0.10029796
|
0.01613878
|
0.01054694
|
0.10029796
|
0.14517959
|
0.01168163
|
0.01143673
|
0.01613878
|
0.01168163
|
0.03010612
|
0.00569796
|
0.01054694
|
0.01143673
|
0.00569796
|
0.01149388
|
Ahora computamos Sw:
Sw = ((50 -1) / 50 + 50 -2) S1 + ((50 -1) / 50 + 50 -2 ) S2
Sw =
0.12424898
|
0.10029796
|
0.01613878
|
0.01054694
|
0.10029796
|
0.14517959
|
0.01168163
|
0.01143673
|
0.01613878
|
0.01168163
|
0.03010612
|
0.00569796
|
0.01054694
|
0.01143673
|
0.00569796
|
0.01149388
|
Vamos por W:
W =
-2.8464883
|
-18.4136903
|
21.2317579
|
32.5898589
|
W’=
-2.8464883
|
-18.4136903
|
21.2317579
|
32.5898589
|
¡Uf! ya casi, ahora que ya tenemos todas las partes, es hora
de ensamblar nuestro modelo :
Modelo = W' ((VectorMediasClase1 + VectorMediasClase2)
/ 2 ) =
Y Listo tenemos nuestro modelo ahora, ya podemos clasificar
nuevas entradas tomando en cuenta lo siguiente:
- Si W’X() (en donde X() es la entrada a clasificar) > 42.462542 entonces está por encima de la línea (plano etc.)Si W’X() (en donde X() es la entrada a clasificar) < 42.462542 entonces está por debajo de la línea (plano etc.)
Saber que clase está arriba y que clase está por debajo no
es nada difícil, basta con proporcionar un
dato del conjunto con el cual se creó el modelo y determinar cuál es
arriba y cual abajo, en este caso versicolor está encima y setosa se ubica debajo
de nuestro plano.
Tomemos como ejemplo la siguiente entrada:
Sepal length
|
Sepal width
|
Petal length
|
Petal width
|
7
|
3.8
|
1.7
|
0.4
|
Ahora computamos:
W’X(7 , 3.8, 1.7, 0.4) = -40.767
Entonces decimos que la entrada pertenece a setosa ya que
ser menor -40.767 < 42.46 se encuentra por debajo de la linea.
Hasta aquí todo excelente, pero ¿Qué pasa si tengo más de 2
clases?, bueno pues es cuestión de crear más líneas, por ejemplo, si tenemos 3
clases, crearemos dos planos, primero detectamos en el modelo que explique la
clase que se ubica en el fondo, si resulta ser de dicha clase bueno allí paramos,
pero si no, entonces ahora computamos el segundo modelo y determinamos su clase,
es decir, modelo1 explica las clases 1 y 2, modelo2 explica las clases 2 y 3. Dada
una entrada, con el modelo1 checamos a que clase pertenece, si pertenece a la
clase uno , allí termina, si no, entonces aplicamos el modelo2 para determinar
si es clase 2 o clase 3.
A continuación muestro una imagen que muestra lo que acabo
de comentar, cabe aclarar que solo grafiqué tres parámetros de las clases de la base de datos iris, y dibujé los planos que representan al modelo creado:
1 comentario:
Muy buena información algo extensa pero entendible
Publicar un comentario