¿Cómo procesar datos numéricos en Python utilizando escalamiento?
El procesamiento de datos numéricos en Python es crucial para mejorar la eficacia de los modelos de aprendizaje automático. El uso adecuado de técnicas de escalamiento puede facilitar la convergencia de algoritmos, lo que aumenta la eficiencia y precisión de los modelos. En esta sección, exploraremos cómo implementar algunas de las técnicas de escalamiento en Python.
¿Qué librerías y herramientas se utilizan?
Antes de iniciar, es necesario configurar el entorno de desarrollo con las herramientas adecuadas. Esto incluye:
DeepNote: Para trabajar en un notebook interactivo.
Librerías de Python: Se utilizan numpy, matplotlib, y scikit-learn.
TimeIT: Medir el rendimiento de los modelos.
Ejemplo de código para importar las librerías necesarias:
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets, linear_model
import timeit
¿Cómo aplicar la regla de escalamiento máximo-mínimo?
El escalamiento máximo-mínimo se utiliza para normalizar los datos dentro de un rango específico. Esta transformación ayuda a que los algoritmos de aprendizaje automático converjan más rápido. A continuación se presentan los pasos básicos para aplicar este método:
¿Cómo medir el tiempo de ejecución de los modelos?
Medir el tiempo de ejecución es vital para evaluar el rendimiento de los modelos ajustados a diferentes datos. Utilizamos la librería timeit para este propósito:
Definir funciones para entrenar el modelo:
deftrain_raw(): model = linear_model.LinearRegression() model.fit(raw_data, target)deftrain_scaled(): model = linear_model.LinearRegression() model.fit(scaled_data, target)
¿Cómo aplicar la normalización z y cuándo utilizarla?
La normalización z transforma los datos restando el promedio y dividiendo por la desviación estándar. Es recomendable para datos con distribución aproximadamente normal.
Estas herramientas y técnicas son esenciales para cualquier científica de datos que desea mejorar la efectividad de los modelos de aprendizaje automático. El dominio profundo de estos conceptos proporciona una base sólida para abordar problemas más complejos de procesamiento de datos numéricos. Recuerda explorar la extensa documentación de scikit-learn para seguir ampliando tus conocimientos y habilidades. ¡Sigue aprendiendo y experimentando con estos emocionantes conceptos!
Procesamiento y Escalamiento de Datos Numéricos en Python
Procesamiento y Escalamiento de Datos Numéricos en Python
Recursos
Resumen
¿Cómo procesar datos numéricos en Python utilizando escalamiento?
El procesamiento de datos numéricos en Python es crucial para mejorar la eficacia de los modelos de aprendizaje automático. El uso adecuado de técnicas de escalamiento puede facilitar la convergencia de algoritmos, lo que aumenta la eficiencia y precisión de los modelos. En esta sección, exploraremos cómo implementar algunas de las técnicas de escalamiento en Python.
¿Qué librerías y herramientas se utilizan?
Antes de iniciar, es necesario configurar el entorno de desarrollo con las herramientas adecuadas. Esto incluye:
DeepNote: Para trabajar en un notebook interactivo.
Librerías de Python: Se utilizan numpy, matplotlib, y scikit-learn.
TimeIT: Medir el rendimiento de los modelos.
Ejemplo de código para importar las librerías necesarias:
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets, linear_model
import timeit
¿Cómo aplicar la regla de escalamiento máximo-mínimo?
El escalamiento máximo-mínimo se utiliza para normalizar los datos dentro de un rango específico. Esta transformación ayuda a que los algoritmos de aprendizaje automático converjan más rápido. A continuación se presentan los pasos básicos para aplicar este método:
¿Cómo medir el tiempo de ejecución de los modelos?
Medir el tiempo de ejecución es vital para evaluar el rendimiento de los modelos ajustados a diferentes datos. Utilizamos la librería timeit para este propósito:
Definir funciones para entrenar el modelo:
def train_raw():
model = linear_model.LinearRegression()
model.fit(raw_data, target)
def train_scaled():
model = linear_model.LinearRegression()
model.fit(scaled_data, target)
¿Cómo aplicar la normalización z y cuándo utilizarla?
La normalización z transforma los datos restando el promedio y dividiendo por la desviación estándar. Es recomendable para datos con distribución aproximadamente normal.
Estas herramientas y técnicas son esenciales para cualquier científica de datos que desea mejorar la efectividad de los modelos de aprendizaje automático. El dominio profundo de estos conceptos proporciona una base sólida para abordar problemas más complejos de procesamiento de datos numéricos. Recuerda explorar la extensa documentación de scikit-learn para seguir ampliando tus conocimientos y habilidades. ¡Sigue aprendiendo y experimentando con estos emocionantes conceptos!
Esta transformación puede crear un poco de confusión si no conoces algunos detalles sobre NumPy. Para las dudas te detallo un poco que hizo en esta línea de código.
Note:X tiene un shape de (442, 10) para nuestro estudio solo necesitamos una columna, buscamos tener un raw con shape (442, 1)
: toma todas las columnas y filas.
None indica la transformación del arreglo (newaxis)
Para tener un contexto de qué son los datos con los que estamos trabajando.
Tenemos un set de datos de 442 pacientes de diabetes. Se tienen 10 columas con los datos de "age, sex, body mass index, average blood pressure, and six blood serum measurements". Estos datos corresponde a las variable que llamamos "X". La variable "y" corresponde a "a quantitative measure of disease progression one year after baseline".
estamos tomando solo la columna del índice de masa corporal.
Los datos del dataset ya vienen pre-escalados y centrados en la media.
Si graficamos los datos con un Scatterplot vemos que hay cierta relación entre el índice de masa corporal y la progresión de la enfermedad, por eso es que realizamos una regresión lineal, para predecir que tan avanzada está la enfermedad a partir del índice de masa corporal.
Para los que no entiendan porque X está definida con mayúscula e y con minúscula, es porque esta convención viene del álgebra, donde X es una matriz, y a las matrices se la denominan con mayúsculas, e y es un vector, y los vectores se lo denominan en minúsculas.
Leyendo la documentación del dataset que se usa para la clase encontré que el dataset ya ha sido escaldo previamente.
.
.
Por esta razón me empecé a preguntar si realmente los escalamientos realizados en la clase eran útiles sobre data que ha sido escalada previamente. Así que descargué el dataset original, el cual se pude encontrar aquí.
.
Para importar la información, pasé los datos a un archivo csv y lo importé en deepnote usando Pandas. En ese momento vi claramente la diferencia entre los datos del dataset que nos ofrece scikitLearn y el original. La variable del dataset que se usa en la clase es el índice de masa corporal (o BMI por sus siglas en inglés).
Aquí se puede ver claramente que los datos de SciKitLearn tienen un tratamiento previo.
.
Lo siguiente que hice fue volver a hacer el proceso de tratamiento de datos para los datos originales.
Aquí se puede ver cómo efectivamente los datos de un rango mayor es reducido y centrado en 0, tanto por el escalamiento min_max como por el z-score.
.
Posteriormente hice la comparación en el entrenamiento con estos nuevos datos y los resultados son evidentes:
.
Mi conclusión personal, es que hay que ser más críticos con los datos que estamos tratando y siempre verificar las fuentes y la documentación :)
Hay un poco de confusion respecto a que fue lo que se realizo con las siguientes dos lineas de codigo:
X, y = datasets.load_diabetes(return_X_y=True)
raw = X[:, None, 2]
Con la primera como ya han explicado, se uso una notacion del algebra en que se dispone que la X sea mayuscula y la y sea minuscula, esto por que se realizo de esta manera? solo por convencion. Que es una convencion? es un metodo de hacer las cosa que es aceptado por todos y que aunque puede no realizarse asi, aun se realiza de este modo para que todos podamos entender (en este caso el codigo hecho por los demas), un ejemplo de una convencion es no cruzar la calle cuando el semaforo esta en rojo. Tambien recuerden que en python igualmente asi se coloque una variable con mayuscula/as esta no se vuelve una constante como sucede en otros lenguajes, sino que igualmente por convencion se asume que es una constante, pero si se modifica su valor este cambiara sin problema alguno. Puede que de alli provenga la confusion de algunos al haberse usado esta notacion.
Puede tambien que al ver la "coma" luego de esta "X" mayuscula, y ver representada la variable "y" se confundan aun mas, pero en python puede realizarse la asignacion de variables de esta manera,
Si yo coloco:
a, b = 1, 2 ### 1,2 = (1, 2), es decir pasamos una tupla
print(f'Valor de a es {a} y Valor de b es {b}')
Visualizaran que de salida arroja esto:
Valor de a es 1 y Valor de b es 2
"X" toma el valor de lo que parece ser un array de arrays, esto por la notacion array ([[ con que comienza y el ]]) con que termina. Algunos diran, oye pero dentro de este array de array hay unos datos bien raros que son:
array([[ 0.06169621],
[-0.05147406],
[ 0.04445121]... etc ... ]]])
Esto es porque alguien ya trato los datos de donde los estamos obteniendo y aplico los procesos que hemos venido haciendo, no mentire, esta tarde y no me acuerdo como se llama este proceso, pero si tengo la nocion de lo que se le aplico, si alguien se lo recuerda que diga en nombre en las respuestas. En fin, por esto es que esos datos no se parecen a los que tenemos en el dataset que yo les pase yque vuuelvo a pasarles: https://www4.stat.ncsu.edu/~boos/var.select/diabetes.tab.txt
"y" toma el valor de la columna 11 que es una medida cuantitativa de la progresión de la enfermedad un año después del inicio, para esto ejecuten la variable y comparen los datos con los presentes en esta tabla, porque sucede esto, creo que es porque esta columna es el indice de la tabla, porque creo esto, porque vean que el dataset no posee un indice con numeros, y un dataset siempre debe tener un indice a modo de referencia, igualmente al no estar tratados los valores de esta variable "y", esto pueden verificarlo, esto me da a entender que la columna 11 es el indice, ya que el indice no debe tratarse con estos procesos.
luego la variable raw es usada para colocarle los valores ya tratados de la fila numero 2, que es la de BMI.
Todo lo demas fue comparar la relacion que tiene el indice de masa corporal y por ende el estado de forma con respecto a la progresión de la enfermedad un año después del inicio.
Con ese yo termine de entender lo que aplicamos al z-score, aunque el spoiler es que las variables:
scaled se calculo usando escalamiento por el metodo del max-min
z_scaled se calculo usando normalización por el metodo del Z-score
pero en teoria estas dos variables son la misma a efectos practicos, solo que se grafico cada una por separado para evaluar cual metodo se habia adaptado mejor a este caso en particular.
Este curso en general, ha sido bien confuso (por lo menos para mi), siento que se podría explicar de una manera mas detallada cada proceso y así no quedamos con tantas dudas, para todas las clases he tenido que buscar clases de otros profesores en internet para poder comprender lo que se dice acá.