¿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!
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)
2 Selecciona la 3ra columna de X.
Más información sobre Numpy Newaxis
Muchas gracias Lizandro, buena explicación que me sirve muchísimo.
👍
De nada.
Debería explicar mejorar cada línea de código.
con cuerdo, no logro seguir la clase
sisi, por mas que no sea una clase de python la verdad es q es imposible de seguir
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.
Muchas gracias.
Gracais, al fin entendí el ejercicio, tuve que repetir 3 veces la clase porque me perdía.
reto
para lograr la estandarización con z score encontré tres formas:
la primera aplicando la formula directamente a los datos
z_score=(raw -np.mean(raw))/np.std(raw) #zcore aplicando la formula
Excelente aporte, demuestra que al utilizar directamente la librería el tiempo disminuye bastante respecto al utilizar la formula.
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.
No me acordaba, gracias
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 :)
buenas tardes, como hiciste para convertir el archivo txt a csv?? yo encontre una pagina en internet pero al convertirlo no aparecen ordenados y todos las filas aparecen agrupadas en una celda. tu configuraste el archivo antes?
genial la clase, tuve que verla 2 veces por que me sentia confundido pero ya pude entender el ejemplo!
La neta sí estuvo bien densa la clase. Yo también tendré que echarmela al menos una segunda vez
yo igual 2 veces y a velocidad normal, ahora toca ver toooda la documentación que menciona, y practicar, si no no sirve jaja
Vengo yo al rescate:
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.
Excelente, esta es otra forma de sacar los promedios y la desviación estándar:
<code>mu = raw.mean()sigma = raw.std()
Anotado. Gracias por el aporte
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á.
Estoy igual, se ve que son conceptos sencillos, operaciones sencillas pero siento que el profe lo complica de más con su lenguaje tan rebuscado y con las pocas explicaciones que nos da.
La verdad recomiendo primero hacer los cursos de python para amañarse más con el lenguaje y las librerias numpy & pandas. A mi me faltaron esas dos últimas y te entiendo, pero creo que con que te vayas sabiendo los conceptos claros: distribucion normal, disperión, varianza, escalamiento, etc. Con eso para mi basta y ya después profundiza en lo demás
El profe creo que explica esta visualización de esta manera (rápida) porque este no es un curso de visualizaicón sino de matemáticas. No te preocupes por la forma, lo importante es el fondo, eso si ve complementando de forma inmediata con los cursos de python y las librerías pandas y numpy respectivamente y al final nadie se sabe todos los métodos, lo importante es tener claro que se quiere hacer y para todo lo demás amigos mios existe Google.
¿Necesito de conocimientos previos para entender esta clase? Porque me perdí totalmente u.u
Este curso es parte de la escuela de Data Science, hay algunos cursos previos ahí que te podrían ayudar a comprender mejor la clase.
Yo diría que necesitas conocimientos en python y notebooks, además de conocimientos básicos en ML o DS
Qué queire decir el profesor con entrenar un modelo ¿Qué está haciendo exactamente en esas 100 repeticiones?
Hola, los modelos nos ayudan a modelar valga la redundancia un comportamiento de la naturaleza (precios de casas, relacion entre dimensiones de flores, clima, etc) de una forma matematica y que de esta manera podamos estudiarlo y predecirlo, la fase de "entrenamiento" de un modelo es el proceso en el cual el modelo aprende de los datos y se ajusta a ellos buscando minimizar su error. Por ej: en un modelo de regresion lineal simple, el modelo va a recibir una data y va a usar un poco de matematicas y codigo para encontrar la combinacion de parametros (pendiente y bias en este ejemplo que te planteo) que nos arrojen el menor error posible.
Te recomiendo mires el siguiente video "modelos para entender una realidad caotica" (el titulo es basicamente un resumen de lo que te expliquè arriba xD): https://www.youtube.com/watch?v=Sb8XVheowVQ&t=4s
Claramente se necesitan más términos, conocimientos y práctica para entender el código visto. Aquí tienen un área de oportunidad el platzi team. Igual que a muchos, no lo entendí del todo, los tiempos (a veces) me salen muchos más rápidos en el raw y el reto para el z scaling no me sale dentro de un rango de -1 a 1.
a esta clase le falta explicar el dataset por que no se entiende de que es y que variables está analizando
HIba excelente hasta que llegue a esta clase que se puso a escribir codigo a diestra y siniestra que en mi vida habia visto (y que no estan las clases de python basico, intermedio ni avanzado). Deben haces esatas cosas pensando que no somos programadores!, tambien dice mucho que no puede explicar porque no alcanza en la clase, lo cual es ridiculo, debe explicar todo, para eso estamos pagando, da igual si estamos un año en el curso mientras aprendamos. Intento entender los link que ponen, pero los siento en chino, no se comprende, y justamente por eso estamos tomando clases, para que nos ayuden a entender, no para que nos manden a leer lo que podriamos leer sin pagar el curso.