Antes de poder entrenar cualquier modelo de machine learning, es importante poder inspeccionar y comprender
nuestros datos. Nuestros modelos solo serán tan buenos como nuestros datos lo sean.
Así que esta clase se centrará en la ciencia de los datos, específicamente en la terminología clave, algunos enfoques
sencillos para cargar conjuntos de datos y luego visualizarlos para entender las relaciones entre los datos.
Para empezar, vamos a repasar algunos términos clave que debes conocer a la hora de trabajar con nuestros datos.
En primer lugar, ¿qué son los datos? Son unidades de información a través de diferentes observaciones.
Puede ser algo tan simple como una encuesta o un sondeo realizado en la escuela, hasta algo tan complejo como la información relacionada
con las finanzas captada por los bancos. En los datos, hay features y las features son descriptores de diferentes cualidades
o información que quieres conocer sobre tus diferentes datos.
Por ejemplo, en los registros médicos podría ser tu altura, podría ser tu género, podría ser si
tienes un determinado nivel de azúcar en la sangre o no. Ahora, dentro de los datos hay a menudo formatos llamado filas y columnas,
las filas te dan información sobre diferentes ejemplos. Así que una instancia u observación particular dentro de tus datos,
que podrán ser pocos, es decir, cientos o miles, o que podrían ser masivos, millones, de hecho, dependiendo de lo que
estás trabajando. Y luego están columnas y las columnas son los diferentes features que
son funcionan como descriptores de lo que estás haciendo con tus datos.
Dentro de la ciencia de los datos, hay adicionalmente otros diferentes términos clave.
Por ejemplo, si has llegado a tomar un curso de estadística, puede que estés familiarizado con el contexto de un valor atípico.
En el contexto de la ciencia de los datos, un valor atípico puede tener múltiples significados.
Uno de ellos puede ser una desviación estadística. Es decir, que hay
algo muy extraño o raro en los datos que se comporta fuera de la media general. Pero,
por otro lado, también podría ser un número que se encuentra perdido o un valor incorrecto.
Y depende de ti ser capaz de introspeccionar tus datos para averiguar frente a qué tipo de valor atípico
te encuentras y si debe incluirse o no en el conjunto de datos.
Por último, está el preprocesamiento, y el preprocesamiento es un enfoque que se adopta cuando se preparan los datos
para que los modelos de machine learning puedan sacar la máxima información de ellos.
Esto podría incluir la eliminación de los valores perdidos, la imputación de los mismos, lo que supone averiguar cuáles son estos valores
o preparar, como aprenderemos más tarde, una escala para que el modelo pueda ser capaz de
calcular valores numéricos. Repasemos, a continuación, un ejemplo de conjunto de datos para anclar estos principios.
En el siguiente conjunto de datos, estás viendo pacientes diferentes y sus historias médicas.
Buscamos averiguar específicamente si los datos de alguien pueden indicar que padece de diabetes, esto en un índice de filas entre 0 y 4.
Tenemos cinco ejemplos, cada uno se refiere a un paciente diferente, un ejemplo de paciente a través de este conjunto
de datos. El objetivo, que no todos los conjuntos de datos tienen, es hallar una cualidad que estamos buscando reconocer.
Así, por ejemplo, en el caso 01 indicamos que alguien no tiene diabetes con un cero y que alguien sí
la tiene con un uno. No todos los conjuntos de datos tienen un objetivo, lo que significa que podrías no saber
a priori o de antemano lo que estás tratando de predecir.
Por último, están las columnas y las columnas son los features de interés.
Por ejemplo, allí tienes cosas como el azúcar en la sangre, que es la glucosa, la presión arterial, etc.
Estos valores pueden ser muy diferentes dependiendo claramente de los distintos pacientes.
Y, del mismo modo, nos sirven para comparar entre diferentes informaciones o filas en el conjunto de datos.
El objetivo está siempre alrededor de un tipo de columna en el conjunto de datos que gustaría ser capaz de
utilizar para construir modelos predictivos. Ahora para analizar diferentes features,
hablemos de los diferentes tipos de datos. Los más populares con los que trabajarás son los numéricos y los categóricos.
Un tipo de dato numérico es un feature que es básicamente un número.
Es discreto o un entero, que es un valor de conteo.
Por ejemplo, cuántas monedas podría tener en el bolsillo versus un número
que es un punto flotante o un número de valor continuo
como la temperatura. Por otro lado, hay variables categóricas.
Las categóricas son features que están etiquetadas. Por ejemplo, podríamos utilizar un mapeo como un hot encoder
que aprenderemos en breve para poder representar estas etiquetas como una forma de número.
Algunos ideas que nos sirven de ejemplos podrían ser, ¿qué forma tiene este juguete?
¿Es un círculo o un cuadrado? Los tipos de datos más complejos son los que incluyen imágenes y texto.
Estos tipos de datos suelen requerir un preprocesamiento muy complejo, por lo que no los tocaremos, pero de igual forma
con el machine learning se puede trabajar con este tipo de datos. Y por último, un elemento que quería enseñarte era
el NaN o "no es un número". Esto es a menudo un valor perdido y corrupto o algo que es extraño
dentro el conjunto de datos. Depende de ti descubrir si un dato es un NaN porque falta esa información o si hay
algún problema con el conjunto de datos. Pero, antes de empezar, me gustaría dar un ejemplo de cómo podemos convertir
variables categóricas en alguna entrada numérica para que un modelo de machine learning pueda tomarla.
Imagina que estoy tratando de predecir el tipo de clima que tendremos a continuación.
Entonces en los próximos cinco días registro lo que veo, si hace sol, si llueve, si está nublado o incluso si nieva.
Para cada día debo escribir lo que veo fuera, pues estoy tratando de construir un predictor que prediga
lo que ocurrirá el siguiente día. Sin embargo, no puedo pasar bien los términos "soleado" o "lluvioso"
a un modelo y por eso necesito convertir estos datos en algún tipo de número.
Así que podría crear un esquema de numeración arbitrario. Soleado podría ser representado, por ejemplo, por el número uno, lluvioso podría
representarse como dos, nublado es tres y nevado sería cuatro. Así esas etiquetas de la diapositiva anterior
pueden convertirse en unos, tres, dos y cuatros dependiendo del tiempo que esté haciendo.
Sin embargo, hay otro enfoque que podemos tomar y se llama hot encoder. El objetivo
de un hot encoder es crear un vector o una forma de representar una pregunta hecha a cada conjunto de datos.
Así que en lo que sigue, continuaremos utilizando el etiquetado 1, 2, 3 y 4.
Pero en lugar de señalar específicamente la etiqueta 1, 2, 3 o 4, vamos a utilizar un vector para representar
el tiempo. Así que en la siguiente X vemos cuatro dimensiones, de la X-uno a la X-cuatro, y efectivamente
hago la pregunta, por ejemplo, para X-uno, ¿hace sol o no?
Para X-dos, ¿hay lluvia o no? y así sucesivamente.
Y así, si quisiéramos representar algo como que el día dos fue soleado y el día tres estuvo nublado, podemos
crear un one hot encoding sustituyendo la respuesta de uno siempre que el tipo de tiempo haya sido valorado correctamente.
Así que para el día X-dos, como se puede ver en esta figura siguiente, sabemos que afuera estaba soleado.
El primer elemento va a ser uno y el resto son ceros. Y lo mismo para el tercer día, excepto
con respecto al nublado. Ahora, con "one hot vector" (el vector de calor) solo uno de estos elementos puede ser uno y el resto
deben ser ceros. En ese sentido, asegúrate de que tienes todas las instancias o etiquetas que quieres
representar. A continuación vamos a trabajar con pandas,
un paquete de Python muy potente para poder cargar y entender nuestro conjunto de datos.
En primer lugar, vamos a utilizar algo llamado CSV o un archivo de valores separados por comas.
Hay muchas formas diferentes de organizar los datos, pero muchas de ellas, especialmente las que se usan para la carga
pueden los conocidos CSVs. Pandas tiene muchos tipos diferentes de funciones de lectura para poder acceder a
información y deducir automáticamente cuáles son las filas y columnas y cuáles deberían ser las features
de sus datos. Así, por ejemplo, puedo usar el término read_CSV que verás entre las preguntas del desafío
para cargar este conjunto de datos CSV alrededor del caso de la diabetes. Además, puedes darle un vistazo al conjunto de datos
utilizando el comando "head" específicamente en el marco de datos o lo que cargue en mi marco de datos
a través del comando read_CSV. Ahora el comando "head" nos permite inspeccionar para ver si pandas
realizó un buen trabajo haciendo las inferencias correctas.
Como puedes ver aquí tenemos embarazo, glucosa, todos los valores de la información médica necesarios
y el resultado correctamente leído. Me siento satisfecha con pandas, pues hizo un buen trabajo infiriendo lo que necesitaba
de este conjunto de datos. Ahora bien, si no estás seguro de la forma en que pandas está leyendo cada una de las columnas de los
features, puedes usar un comando llamado "dtypes" y dtypes trata de inferir qué tipos de datos diferentes
tenemos. Ahora bien, no va a ser en el mismo formato que conversamos antes; es decir, información numérica
y categórica, pero podrías ver algo en las líneas de int, float u object.
Depende de ti decidir exactamente cómo clasificarlo.
Por ejemplo, como un int numérico o es una representación categórica de una int. Te toca
sentarte y pensar exactamente cómo quieres representar tus datos.
Pero el campo tipos de representación puede darte una primera comprensión de si pandas hizo
o no un buen trabajo a la hora de organizar la información correctamente.
El siguiente paso es ser capaz de visualizar los datos. Antes de entrenar tus modelos de machine
learning e incluso después de ello, es importante entender la relación que
los modelos predicen entre las features y sus salidas o incluso las features entre sí.
Entonces así vamos a repasar algunas estrategias para poder graficar y entender los conjuntos de datos.
El primer ejemplo que voy a darte es el de un histograma. El objetivo de un histograma es llegar
a distribuir tus datos. Puedes pensar en distribución como una forma de tratar de averiguar cuáles son
los valores más frecuentes dentro de tu conjunto de datos para una columna o un feature determinado.
Esto, sin embargo, requiere que se doblen los datos como se ve en la figura aquí en la que estoy
trazando un ejemplo muy específico de la edad de los pacientes que tengo.
Ahora permíteme darte un ejemplo de anclaje para ayudarte a andar a través de este enfoque.
Para el histograma imagina que me interesa saber cuántas monedas tienen mis amigos en sus bolsillos.
Así que recopilé algunos datos. Hice la pregunta: ¿cuántas monedas tienes en el bolsillo? Y seguidamente
ellos me dieron un par de respuestas. El cero representa los casos de aquellos que no tienen monedas en sus bolsillos.
El uno representa cuando tienen una moneda. Pero resulta que algunos llegaron a tener incluso 10 monedas en sus bolsillos.
Puedo crear contenedores donde justifico los límites inferior y superior y considero a alguien en
un contenedor. Si están entre el límite inferior y el superior. Por ejemplo, uno de los bins podría preguntar:
¿no tienes monedas en el bolsillo? Y resulta que en este conjunto de datos que tengo aquí
representado por X, solo hay una persona sin monedas en el bolsillo.
La siguiente casilla podría ser 1 moneda. Resulta ser que tengo 2 personas en esa situación.
Los contenedores no tienen que ser de igual longitud, como se puede ver en el último contenedor, en el que miramos más de
cuatro monedas entre 4 y 11. Así que eso hace referencia a las personas que tienen 4, 5, 6 y hasta 11
monedas en sus bolsillos. De esta manera podemos elegir los valores de la bandeja, ya sea proporcionándole un número y
espaciándolos de forma equitativa o proporcionando los bordes explícitos de estos recipientes en los que contar nuestros datos.
El siguiente ejemplo va a ser gráficos de dispersión. Mientras los histogramas pueden ser generalmente muy buenos en
la obtención de una única distribución y, en casos más avanzados, de múltiples distribuciones, los gráficos de dispersión son
extraordinariamente buenos para encontrar relaciones multidimensionales.
Por ejemplo, la relación entre dos features diferentes al trazarlos en el eje X
horizontal y el eje Y que es vertical.
Así que en la siguiente figura, estamos viendo la presión arterial en relación a la edad del paciente,
pero lo que notamos es algo muy extraño. De hecho, hay muchas personas con presión arterial cero.
No obstante, esto es médicamente algo muy malo. Y por lo tanto debe ser un error en la presentación de este
conjunto de datos. Y por eso, los gráficos de dispersión pueden ser muy útiles para evaluar rápidamente las anomalías
en tu conjunto de datos, particularmente con respecto a un feature muy específico.
Por otro lado, estos también pueden ayudarte a detectar tendencias. Por ejemplo, esperarías una presión arterial más baja
en las personas más jóvenes. Entonces podrías ver alguna tendencia vaga como esa en el conjunto de datos aquí.
Para aprender exactamente cómo leer un gráfico de dispersión, voy a utilizar el siguiente ejemplo.
En esta figura se ve una X y una Y. La X es a menudo un feature de entrada y la Y puede ser
un feature diferente en su conjunto de datos, pero más a menudo un objetivo de salida.
En ese sentido, estarás pensando: ¿cómo varía esa feature de entrada con respecto a ese objetivo de salida?
A veces la gente utiliza la connotación, XI e YJ, que representa la feature de entrada para un
punto de datos "Ith" o el punto de salida Y arbitrario.
Esto básicamente es tratar de decir un punto arbitrario en lugar de especificar el primero, el segundo o el último.
Y esto nos permite generalizar algunas de las herramientas matemáticas que quisiéramos para un conjunto de datos
particular. Entonces, en resumen, antes de terminar, hemos aprendido que pandas puede ayudarnos a trabajar con conjuntos de datos,
ayudarnos a cargarlos, visualizarlos y entenderlos. Entre las técnicas de visualización, aprendimos sobre
histogramas, que nos permiten ver las distribuciones de nuestros datos, en particular con respecto a un
solo feature o columna. También vimos gráficos de dispersión que nos permiten estudiar la
relación entre múltiples features, específicamente dos de ellos, ya sea los features en nuestro conjunto de datos
o incluso particularmente un feature de entrada y un objetivo de salida. En la siguiente clase,
vamos a hablar de los tipos de algoritmos de machine learning y de la mejor manera de implementarlos.