[MÚSICA] Hola, bienvenidos a un nuevo video de ayudantía de nuestro curso de minería de datos. En este video, veremos un ejemplo del algoritmo vecinos cercanos. El objetivo principal de este video es aplicar el algoritmo que antes mencioné, que se llama vecinos cercanos, sobre imágenes en escala de grises. Estas imágenes contienen números del cero al nueve, hechos a mano, la idea es crear un algoritmo capaz de reconocer o clasificar entre estos diez dígitos. Primero que todo, me gustaría recordar un poco de qué se trata el algoritmo de vecinos cercanos. Como se vio hace un par de semanas, este consiste en colocar nuestros datos en un espacio N-dimensional, donde N corresponde a la cantidad de variables que tenemos. En este caso, tenemos 18 instancias en un espacio de dos dimensiones, nueve son de la clase uno y nueve de la clase dos. Para clasificar un dato nuevo, como se ve en pantalla, o una nueva instancia, lo que hacemos es colocarlo en este espacio de dos dimensiones. Luego, calculamos la distancia que existe entre este nuevo dato y los 18 anteriores. Si usamos solo un vecino cercano, nos quedamos con la clase del vecino que esté más cerca. En este caso, el más cercano a nuestro dato es el que está con un círculo verde, en pantalla, y corresponde a la clase uno. Otro caso consistiría en usar más vecinos, como por ejemplo, siete. En este caso, nuestro dato corresponderá al con mayor frecuencia. Viendo nuevamente nuestro ejemplo en pantalla, seis predicen que es de la clase uno y uno que es de la clase dos, por lo que nuestro dato lo catalogamos como de la clase uno, al ser la mayoría. Habiendo recordado de qué se trataba el algoritmo visto en clases, veremos un ejemplo real, extraído de Kaggle. Como les había mencionado anteriormente al inicio de este video, utilizaremos una base de datos real, la cual cuenta con imágenes en escala de grises con los valores del cero al nueve. Nuestro clasificador debe ser capaz de ver estas imágenes y predecir cuál es el valor de esta. Como bien recordarán, una imagen consiste en varios píxeles y para usar el algoritmo de vecinos cercanos se necesitan de N dimensiones. En este caso, usaremos la cantidad total de píxeles como las variables para el modelo, los cuales serían aproximadamente O:784 píxeles, lo cual corresponde a 28 x 28. Intuitivamente, lo que estamos haciendo es comparar pixel por pixel en las imágenes que tenemos, y las que son parecidas deberían tener coloreado en la misma zona. En este caso, por ejemplo, el cuatro de la izquierda es bien parecido al cuatro de la derecha en varias partes de la imagen, lo cual, nuestro algoritmo debe ser capaz de predecir y predecir correctamente que es el número cuatro. Como les mencionamos anteriormente en este video, lo que intentaremos hacer o lo que realizaremos es un algoritmo para reconocer dígitos en una imagen. Para esto, primero que todo, bajaremos la base de datos, utilizando la plataforma Kaggel. La plataforma Kaggel, como se les mencionó la primera vez de ayudantía, consiste en una plataforma donde podemos encontrar distintos data sets públicos, y en la cual existen competencias donde grupos o grupos de personas compiten por tener el mejor accuracy y el mejor modelo. En este caso, trabajaremos con la base de datos llamada Digit Recognizer, la cual puede ser descargada de forma gratuita, lo único que necesitamos es una cuenta, la cual se puede crear de manera fácil. Esta consiste de dos bases de datos, una de training y otra de testing, pero para este ejercicio debido a que RapidMiner solo es capaz de usar de 10.000 filas con la licencia gratuita, usaremos solo el training de data set. Lo descargamos, cosa que yo you lo tengo acá, lo tengo you en mi computador y lo que tenés que hacer es reducir el tamaño de este data set a solo 10.000 filas. Una vez que tienen eso you preprocesado, pasamos directamente a nuestra plataforma de RapidMiner. Lo primero que haremos será agregar el dato, es por esto nos que iremos a Add Data, My Computer. Buscaremos el archivo para poder agregarlo. [SONIDO] Apretamos en next y nuevamente en next, debido a que se procesó bien. En esta parte, tenemos que formatear las columnas, esto es algo que no habían visto en la primera videoayudantía, debido a que no era necesario la clasificación. A RapidMiner debemos decirle cuál de estas columnas corresponde a la clase. En este caso, la primera columna, la que tiene label, corresponde al número de la imagen, es por esto que le cambiaremos el rol a la columna. Change Role y pondremos el rol de label. Además de esto, RapidMiner no es capaz de trabajar con integers, que son números enteros, sino que trabaja con palabras, es decir, tenemos que cambiar el tipo de la columna, en este caso, polinominal. Apretamos nuevamente en next y la guardamos. Yo you lo tengo guardado, debido a que se demora aproximadamente unos 30, 40 segundos en cargar. Una vez que lo tengan cargado en su RapidMiner, procederemos a realizar el algoritmo. Primero que todo, moveremos la base de datos en Ambers a la ventana de procesos y agregaremos los siguientes operadores. El primer operador será Normalize, el cual nos permite poder normalizar cada columna. Si bien estas columnas se encuentran entre cero y uno, podríamos decir que you está normalizado para el tema de la distancia, siempre es bueno normalizar. Una vez normalizada nuestra columna, procederemos a crear un training set y un testing set, para esto utilizaremos el bloque llamado Split It, el cual nos permite dividir nuestra base de datos en dos. Y vemos en los parámetros y apretaremos en Edit Enumeration. Agregaremos una entrada, le pondremos 70% y 30% para el testing. Una vez agregado nuestro Split Data, procederemos a agregar al operador y también a la métrica de evaluación. El operador se llama K-NN, de vecinos cercanos, y se encuentra en verde. Si se fijan, RapidMiner automáticamente tiene distintos colores para las distintas etapas. Los colores en verde corresponden a los modelos, los colores en un morado más claro corresponden al preprocesamiento y los morados corresponden a los datos mismos. Conectamos la salida exa con la entrada exa de Split Data y el par con la entrada de atrás. Esto, una vez que tenemos el modelo K-NN, este bloque nos entrega un modelo, Mod modelo. Incluso si hacen click derecho y seleccionan en Show brighter info, les va a salir que es model. Agregamos, tenemos que aplicar nuestro modelo, para esto usaremos el bloque Apply Model, el cual nos permite poder agregar este modelo en datos no antes vistos. Conectamos la salida mod con la entrada mod y la salida par, que corresponde a nuestro testing con nuestra entrada de Apply Model. Este operador lo que nos generará es una nueva base de datos, la misma que teníamos anteriormente con una columna extra, que es la columna predecida para cada una de estas filas. Por último, agregaremos el bloque llamado Performance, el cual nos permitirá poder medir el performance de nuestro clasificador. Conectamos la salida lab con la entrada lab y la salida per a la entrada res. Una vez que tenemos todo conectado, podemos proceder a apretar Run. Es importante recalcar que en estos momentos estamos usando un vecino cercano, y cambiaremos la distancia a una distancia euclidiana. Cuando le aprieten Run se va a demorar un poco más, debido a que estamos trabajando con 30 megabytes. Es por esto que veremos distintos resultados, que you los tengo preprocesados. En esta segunda parte del video, lo que les quiero mostrar es que los distintos parámetros pueden ir cambiando y también el Performance de nuestro modelo. En este caso, vamos a usar dos medidas de distancia, la distancia euclidiana y la distancia Manhattan. Para esto nos vamos al operador K-NN, el cual cuenta con estos mismos parámetros y vamos a ir modificando. Lo que vamos a intentar es modificar el parámetro K, que es la cantidad de vecinos cercanos, vamos a poner uno, tres y siete. Y vamos a cambiar también la medida de distancia, Numerical measures, vamos a probar la medida de Manhattan y la distancia euclidiana. Como bien les mencioné anteriormente, estos resultados pueden tomar su tiempo dependiendo del computador, es por esto que yo you los tengo preprocesados y es a lo que pasaremos a continuación. Como pueden ver, acá encuentran las dos matrices de confusión, tanto en la distancia euclidiana con un vecino cercano, como en la distancia Manhattan con un vecino cercano. En ambos casos vemos que el accuracy promedio de la distancia Manhattan con un vecino cercano es superior a la distancia euclidiana. Pero aún así ambos clasificadores fueron bastante buenos. Usando tres vecinos cercanos, vemos claramente, nuevamente que la distancia Manhattan mejora el performance, superando aún más a la distancia euclidiana. Y por último, con siete vecinos cercanos, nuevamente la distancia Manhattan también es superior a la distancia euclidiana. Como en una matriz de confusión, las filas, tenemos el Precision y tenemos el Recall. En este video, vimos cómo aplicar el algoritmo de vecinos cercanos, usando el programa de RapidMiner. Logramos clasificar correctamente las imágenes de dígitos, con un rendimiento superior al 90%. Además, usamos una variante de algoritmo, como lo es la distancia utilizada, esta última puede ser crítica para el rendimiento de nuestro clasificador y es recomendable probar más de una que haga sentido con el problema. Eso ha sido todo por hoy, y espero verlos pronto en el siguiente video, en donde aplicaremos el algoritmo de árbol de decisión. [AUDIO_EN_BLANCO]