Practica KNN
Practica KNN
Practica KNN
Índice
1. Introducción 1
2. Requisitos previos 1
3. Ob jetivos 2
4. Material 2
5. Actividades 2
6. Conclusiones 6
1. Introducción
Las técnicas pertenecientes al denominado paradigma de aprendizaje vago (del inglés lazy lear-
ning ) son métodos de aprendizaje en los que no se inere ningún modelo. En su lugar, el proceso
de generalización a partir de los datos de entrenamiento se produce sólo en el momento en que se
realiza una pregunta al sistema. De aquí, el nombre de aprendizaje vago o perezoso con el que se
conoce a este tipo de algoritmos de aprendizaje.
Una de las principales ventajas del aprendizaje vago es que la respuesta a cada pregunta del
sistema se obtiene mediante una aproximación local, es decir, a partir de los ejemplos de entrena-
miento más parecidos, tal y como ocurre con el algoritmo k-NN. Esta propiedad de localidad se
pierde en otros métodos de aprendizaje durante el proceso de generalización.
Por contra, una de las desventajas de este tipo de técnicas es que resultan normalmente lentas a
la hora de responder a una pregunta del sistema, dado que, para ello, tienen que considerar todos y
cada uno de los ejemplos del conjunto de entrenamiento. Sin embargo, no requieren de una fase de
entrenamiento como la que sí utilizan todos aquellos paradigmas de aprendizaje basados en modelo.
Otro inconveniente es que necesitan tener almacenados todos los ejemplos de entrenamiento, con
el consiguiente requerimiento de espacio de almacenamiento en memoria.
2. Requisitos previos
1. Haber estudiado los capítulos 1 y 2 del texto base [Borrajo et al., 2006].
2. Haber estudiado la sección 6.3 (Capítulo 6), Técnicas de aprendizaje vago, del texto base
[Borrajo et al., 2006].
1
Figura 1: Acceso al algoritmo IBk desde el panel Classify de la ventana Explorer.
3. Objetivos
4. Material
Programa Weka.
5. Actividades
1. Cargar el chero iris.ar desde el panel Preprocess de Explorer. El contenido de este archivo
es una colección de instancias que representan 3 variedades de lirio. Se compone de cinco
atributos. Los cuatros primeros corresponden a diversas medidas morfológicas de la planta
(anchura y longitud de sépalos y pétalos) y el quinto corresponde al valor de la clase (tipo de
lirio). Para más detalle, abra el archivo con cualquier editor de textos y consulte la información
de cabecera de dicho archivo.
3. Seguidamente, se describen los parámetros más relevantes del algoritmo IBk (ver g. 2): (a)
el parámetro kNN permite establecer el número de vecinos que usará el algoritmo; (b) el
parámetro crossValidate, si se pone a true (por defecto está a false ), permitirá al algoritmo
2
Figura 2: Parámetros del algoritmo IBk
seleccionar automáticamente el mejor valor para el número de vecinos a usar; (c) el parámetro
distanceWeighting permite ponderar la contribución de cada vecino por su distancia (por
defecto, no se aplica ponderación); (d) el parámetro meanSquared se dejará siempre a false
(valor por defecto); (e) el parámetro nearestNeighbourSearchAlgorithm permite seleccionar el
tipo de algoritmo de búsqueda del vecino más cercano y, en nuestro caso, siempre utilizaremos
la opción por defecto: LinearNNSearch (algoritmo de búsqueda basado en fuerza bruta y
que utiliza la distancia euclídea como medida de distancia); (f ) nalmente, el parámetro
windowSize se mantendrá siempre al valor 0 (valor por defecto). Se puede encontrar una
descripción más detallada de estos parametros pulsando el botón More desde la ventana de
parámetros (ver g. 2).
4. Seleccione kNN =1 y el resto de parámetros a la opción por defecto. Realice los siguientes
experimentos:
Experimento 4.1: Use la opción Use training set en la caja Test options. Ejecute el
algoritmo.
Experimento 4.2: Seleccione ahora la opción Percentaje split y rellene el campo % con el
valor 66. Esto hará que se utilice 2/3 de la base de datos para entrenamiento y el resto
(1/3) para validación. En cada ejecución modique el valor de la semilla utilizada para
obtener diferentes particiones de entrenamiento/validación (este parámetro, Random
seed for XVal/ %Split, está accesible pulsando el botón MoreOptions... situado en la caja
5. Dado que la medida de predicción de clasicación más robusta se obtiene con la técnica de
validación cruzada, a partir de ahora, se trabajará siempre con la opción Cross-validation
(Folds =10, semilla=1). En este apartado, se realizará un estudio de cómo inuye el valor
3
del número de vecinos en el porcentaje de acierto de clasicación. Para ello, realice varias
ejecuciones del algoritmo con los siguientes valores del parámetro kNN : 1,2,3,...10. El resto
de parámetros permanecerán al valor por defecto.
6. Se puede también interpretar los resultados de clasicación desde un punto de vista gráco.
Así, dentro de la caja Result List, seleccione con el botón derecho del ratón la ejecución con
la que, en el paso anterior, se produjo el mayor porcentaje correcto de clasicación y, sobre
el menú desplegable, seleccione la opción Visualize classier errors que, a su vez, abrirá una
ventana gráca. Esta ventana permite, entre otras cosas, comparar visualmente las clases
reales de cada instancia con respecto a las clases predichas por el conjunto de datos de
entrenamiento. Para ello, en las cajas correspondientes al eje X e Y, seleccione class(Nom)
y predictedclass(Nom), respectivamente (no olvide utilizar el botón deslizante denominado
Jitter que permite introducir un pequeño ruido sobre el valor real de las instancias y, de esta
manera, visualizar y separar las instancias solapadas). Otra funcionalidad de esta ventana es
que permite conocer la información de la instancia asociada a cada uno de los puntos del plot
sin más que clicar con el cursor del ratón sobre la instancia deseada. Para obtener información
más detallada del resto de controles de esta ventana consultar el documento 'Weka: Guía de
usuario de Explorer '.
7. En el paso 5, se tuvo que ejecutar el algoritmo tantas veces como valores diferentes se asignó
al valor de k (parámetro kN N ), con el objeto de decantarnos por el valor de k que mayor
porcentaje correcto de clasicación obtuvo. No obstante, esto mismo se puede hacer de forma
automática actuando sobre el parámetro crossValidate y asignándole el valor true. De esta
forma, Weka realizará un barrido del algoritmo para todos los valores de k pertenecientes al
conjunto {1, 2, ..., knn0 ], knn0 el valor asignado al parámetro
siendo kNN. Por tanto, para
este experimento se seleccionará kN N = 10, crossValidate =true y el resto de parámetros a
su valor por defecto. A continuación, ejecute al algoritmo.
8. Hasta ahora, todos los experimentos realizados no han usado la opción de ponderar la clasi-
cación de cada vecino por su distancia. Esto es posible hacerlo actuando sobre el parámetro
distanceWeighting. En este caso, seleccione kN N = 10, crossValidate=true y el resto de pa-
rámetros (salvo distanceWeighting ) al valor por defecto. A continuación, realice los siguientes
experimentos.
4
Experimento 8.1: Seleccione distanceWeighting =Weight by 1/distance y ejecute el al-
goritmo.
Experimento 9.1. Teniendo en cuenta que los atributos tienen la siguiente asignación nu-
mérica: 1.sepallength, 2.sepalwidth, 3.petallength, 4.petalwidth, 5.class, seleccione sólo
los atributos 1,2,5 y ejecute el algoritmo. Aunque el ltrado de los atributos 3 y 4 podría
realizarse desde el panel Preprocess de Weka, en este caso, hay una forma más rápida de
hacerlo. Para ello, basta especicar en el parámetro nearestNeighbourSearchAlgorithm
> LinearNNSearch > EuclideanDistance > atributteIndices los índices de los atributos
a utilizar (separados por comas) en el cálculo de la distancia (ver g. 3).
Experimento 9.2. Repetir el experimento 9.1, seleccionando sólo los atributos 1,3,5.
Experimento 9.3. Repetir el experimento 9.1, seleccionando sólo los atributos 1,4,5.
Experimento 9.4. Repetir el experimento 9.1, seleccionando sólo los atributos 2,3,5.
Experimento 9.5. Repetir el experimento 9.1, seleccionando sólo los atributos 2,4,5.
Experimento 9.2. Repetir el experimento 9.1, seleccionando sólo los atributos 3,4,5.
5
Documentación a entregar: Indique el valor de k elegido en cada experimento y los
porcentajes de acierto de clasicación respectivos. A la luz de los resultados obtenidos,
indique si el algoritmo k-NN depende o no del subconjunto de atributos (elegido a partir
del conjunto de atributos original). Si la respuesta es armativa, ¾existe alguna pareja
de atributos que permita obtener un porcentaje correcto de clasicación tan o más
competitivo como el que se obtuvo trabajando con todos los atributos del conjunto de
datos? Compare los resultados con los obtenidos en el paso 7.
10. No hay que olvidar que en los métodos pertenecientes a la técnica de aprendizaje vago es
el propio conjunto de datos de entrenamiento el que almacena el conocimiento a usar. En
este apartado se va a utilizar dicho conocimiento para clasicar un conjunto de instancias
de clasicación desconocida y almacenadas en el chero "iris-unknown.ar". Si se edita este
1
archivo , puede comprobarse que, en la sección de datos, el valor del atributo clase está
etiquetado con la marca '?' (valor desconocido). A continuación, realice las siguiente acciones:
Asigne al parámetro kNN el mejor valor obtenido en todos los experimentos, ponga
crossValidate=false, active o no el parámetro distanceWeighting dependiendo de si el
efecto de la ponderación fue o no benecioso, seleccione los atributos a usar y el resto
de parámetros manténgalos a su valor por defecto.
Marque la opción Supplied test set de la caja Test options y, a continuación, pulse el
botón Set... Esto le permitirá cargar en memoria el chero de instancias de clasicación
desconocida (iris-unknown.ar ) y dejarlo preparado para la acción siguiente.
Sitúe el cursor encima de la ejecución realizada (caja Result List ) y, con el botón derecho
del ratón, seleccione la opción Re-evaluate model on current test set. Esto producirá la
clasicación de las instancias del mencionado chero, pero no se generará ningún tipo
de estadística.
Para saber cómo se clasicaron las nuevas instancias, se seleccionará la opción Visualize
Classier Error asociada a la ejecución realizada (tal y como ya se indicó en el paso
6). Esto provocará la aparición de una nueva ventana que muestra un plot con todas
2
las instancias implicadas . Utilice el botón Save de dicha ventana para guardar la in-
formación de clasicación en un archivo. Ahora, si se edita el archivo generado, podrá
comprobarse que el contenido coincide con el archivo original con la salvedad de que se
ha añadido un nuevo atributo, denominado predictedClass, que muestra la clasicación
predicha para cada instancia.
6. Conclusiones
Referencias
[Borrajo et al., 2006] Borrajo, D., González, J., & Isasi, P. (2006). Aprendizaje Automático. Madrid
(España): Sanz y Torres.