6.4 Clasificación mediante el vecino más cercano

 Una de las técnicas de clasificación más usada en Aprendizaje Automático es la conocida como “vecino más cercano”. Esta técnica consiste en que si tenemos un conjunto de puntos C en Rn etiquetados A o B y queremos saber si un nuevo punto P es A o B, basta con buscar el punto Q de C  más cercano a P y asignarle a P la etiqueta de Q.

 
Por ejemplo en la figura el punto verde se clasificaría como triangulo rojo. La regla se puede extender a más de un vecino, escogiendo la etiqueta mayoritaria entre los k-vecinos más cercanos. Por ejemplo, para k=1 y k=3 el punto verde sería clasificado como triangulo rojo pero para k=5 sería cuadrado azul. Es una técnica muy usada para clasificar un nuevo elemento en base a datos anteriores. Por ejemplo, si un paciente acaba de ingresar, podemos clasificar su gravedad comparando sus constantes médicas con el histórico de pacientes ya clasificados.

Supongamos que tenemos los datos históricos de un conjunto de pacientes que se clasificaron según una patología en graves o leves. Para cada paciente tenemos guardados los valores de NVAR variables médicas tomados durante NHORAS en una matriz de valores reales (NHORAS x NVAR). A partir de esos valores se obtiene el valor medio de cada variable (media por columna) y se almacenan en un vector de reales (de dimensión NVAR). Así pues un Paciente está constituido por:
·      Codigo: Un código que es una cadena de caracteres
·      Valores: Una matriz o array bidimensional de reales de dimensiones NHORAS x NVAR
·      ValoresMedios: Un array de reales (de dimensión NVAR) con las medias por columna de la matriz anterior.
·      Estado: Una etiqueta A (grave) ó B (leve) mediante un carácter.

Los datos de todos los pacientes los almacenaremos en un tipo Historico con los datos de como máximo 100 pacientes. Se pide:

 
6.4.1 Construya todos los tipos de datos necesarios para definir un Paciente y un Historico.












6.4.2 Construya una función tal que reciba una MatrizReal y devuelva una TablaReal con la media por columnas de los valores de la matriz.










6.4.3 Usando la función anterior construya otra función completaPaciente que tenga un Paciente como parámetro de entrada/salida, de forma que entra con la matriz de reales completa y lo devuelva (en el mismo argumento) con el array de medias por columna calculado.





6.4.4 Construya una función que recibe dos arrays unidimensionales y devuelve la distancia euclidea según la fórmula:  
(similar al ejercicio 4.1.5)








6.4.5 Con la función 6.4.4 anterior, construya otra función que calcule y devuelva la distancia entre dos Pacientes dados como la distancia entre sus arrays de medias por columnas.
 
 
 
6.4.6 Usando la función 6.4.5, construya otra función tal que dado un Historico y un Paciente p nuevo, devuelva el índice del paciente del Historico con menor distancia a p.










6.4.7 Escriba un programa principal tal que

1.     Defina e inicialice un array de cadenas de caracteres con los nombres “dat1.txt”, “dat2.txt”, “dat3.txt” y “dat4.txt” y construya un Historico a partir de los datos contenidos en los ficheros.
2.     Lea del fichero “nuevo.txt” los datos de un Paciente pnew.
3.     Imprima en pantalla cuál es la etiqueta que le corresponde a pnew en función de los pacientes del Historico aplicando la regla del vecino más cercano mediante la función del apartado 7.
 


 

No hay comentarios:

Publicar un comentario