Miguel Angel Velazquez Romero
Tomas Dale
MIL GRACIAS
Joaquín Ricardo Svoboda Abregú
sos un genio mundial amigo!
¿Cómo comienza el proceso de codificación?
Damos inicio a la codificación al importar las librerías necesarias. Comenzamos con pandas, utilizando el alias pd para simplificar su referencia en el código. A continuación, importamos Scikit-learn (sklearn) que es esencial para la implementación de algoritmos de aprendizaje automático. Para la visualización de gráficos, se emplea matplotlib.pyplot con el alias plt. Estas herramientas son fundamentales para manejar y procesar datos de manera eficiente.
¿Qué módulos de Scikit-learn son esenciales?
Dentro de scikit-learn, utilizamos módulos específicos para descomposición y clasificación. Del módulo de descomposición, importamos el algoritmo PCA y su variación incremental IncrementalPCA. Estos módulos son vitales para efectuar reducciones de dimensionalidad, optimizando el rendimiento de nuestros modelos sin perder información relevante. Además, implementamos un algoritmo de clasificación sencillo, la regresión logística, proveniente del submódulo linear_model.
Además, preparamos los datos importando otros dos módulos: uno para normalizar los datos, asegurando que se encuentren en una escala común, y otro para dividir estos datos en conjuntos de prueba y entrenamiento.
¿Cómo identificar el script principal?
Para asegurar la ejecución correcta de scripts, especialmente cuando trabajamos con múltiples archivos, utilizamos la directiva:
if __name__ == '__main__': # Código a ejecutar
Esta línea de código es crucial. Indica que el script actual es el principal, responsable de coordinar la ejecución del flujo total. Si este script llama a otros, estos no tendrán esta variable asignada, lo que previene la ejecución inadecuada de scripts secundarios al ser importados.
¿Cómo cargar y preparar los datos?
Una vez listas nuestras librerías, el siguiente paso es cargar los datos en un DataFrame de pandas. Se recomienda guardar los datos en una carpeta específica, como 'data', facilitando su identificación y manipulación.
Cargando los datos:
Usamos la función read_csv para cargar archivos .csv, asegurando que la ruta al archivo se especifica correctamente.
df = pd.read_csv('./data/heart.csv') print(df.head())
Estos comandos cargan los datos y verifican su correcta lectura imprimiendo las primeras filas del DataFrame.
¿Cómo se transforman y dividen los datos?
Con los datos cargados, es esencial prepararlos antes del entrenamiento del modelo. Esto implica la normalización y la división en conjuntos de entrenamiento y prueba.
Normalización:
El módulo StandardScaler de Scikit-learn normaliza los datos.
from sklearn.preprocessing import StandardScaler scaler = StandardScaler() features_scaled = scaler.fit_transform(features)
División de datos:
Una vez normalizados, los datos se dividen utilizando train_test_split. Esta función esencial garantiza una repartición balanceada y aleatoria de los datos.
from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(features_scaled, target, test_size=0.3, random_state=42)
Aquí, especificamos que el 30% de los datos sean destinados a pruebas, mientras que el 70% restante se usará para entrenamiento. El uso de random_state asegura replicabilidad en experimentos futuros.
Al seguir estos pasos, los datos están listos para aplicar PCA y eventualmente ejecutar la regresión logística, lo que facilitará una correcta clasificación y análisis de las variables involucradas. ¡Continúa aprendiendo y perfeccionando tus habilidades en ciencia de datos!
Miguel Angel Velazquez Romero
Tomas Dale
MIL GRACIAS
Joaquín Ricardo Svoboda Abregú
sos un genio mundial amigo!
Luis Eduardo Chacón Wilches
Definitivamente me gusta más Jupyter Notebook o Google Collab Jajaja
Giovany samaca
totalmente deacuerdo en Google Collab no hay que instalar nada y Jupyter Notebook 👌🏾 buenisismo
Cesar Augusto Morales Godoy
Personalmente también prefiero colab, pero es bueno hacer los ejercicios en local ya que en un entorno real, no siempre tendremos acceso a internet y es necesario en local, por ejemplo un robot con limitado acceso a internet (en Marte o la Luna por ejemplo). A demás te ayuda a entender más a fondo el funcionamiento de los scripts. Ya con estos conceptos bien claros se puede usar colab o cualquier otro cuaderno de jupiter.
Rodrigo Urquizo Yepez
La estandarizacion que hace sklearn con StandardScaler es: z = x-u / s u:media s:desviacion estandar
Luis Mario Rivas Hernández
Interesante saber esto, muchas gracias!
Miguel Angel Velazquez Romero
Miller Puentes
Excelente aporte, me hubiera gustado que el profesor explicara porqué debía normalizar.
Luciano Vicidomini
Hay un curso de esto ! es uno de esos de matemáticas que tiene Platzi.
Henry Mendiburu Díaz
El valor para "random_state" puede ser cualquier número, sin embargo casi siempre se utiliza el número 42. Aparentemente el número "42" fue elegido como un tributo a "Hitch-hiker's Guide" de Douglas Adams, ya que supuestamente era la respuesta a la gran pregunta de "La vida, el universo y todo" calculada por una super computadora con inteligencia artificial creada específicamente para resolver este misterio. https://www.youtube.com/watch?v=tK0urw144cU
jonathan marin
importante! El train_test_split se debe hacer antes de realizar el standardscaler ya que sino se hace en ese orden se estaría filtrando informacion al modelo. lo que se conoce como "data leakage"
Fernando Jesús Núñez Valdez
ALEJANDRO ESPINAL RESTREPO
Hola a todos, acá la idea es no utilizar información de la porción de entrenamiento 'train' para escalar la porción de 'test', debido a que si no hacemos esto, estaríamos introduciendo información a los datos de 'test' que no tendríamos en condiciones reales, como lo indica @jmarinpavia260.
Es por ello que recomiendo ajustar o entrenar 2 escaladores (scalers), uno para 'train' y otro para 'test', así, a la hora de escalar, solamente estaríamos usando datos del 'test' para escalar el 'test' y sólo datos del 'train' para escalar el 'train'.
A continuación dejo un ejemplo.
Saludos !
Christian Sanclemente
No me quedó muy claro lo de random_state, en cursos anteriores entendía que se debía desactivar para no arrojar valores aleatorios. También me cuestiono, porque razón X_train usa mayúscula y y_train usa minúscula? supongo que es convención pero no comprendo la razón.
Geraldine León
Es por convención:
Christian Sanclemente
Gracias por tu respuesta.
david jurado
Deberían actualizar este curso, ya lleva muchos muchos años
Karla Grajales
si veo preguntas de hace 6 años y ademas en los recursos no estan los archivos que se necesitan
David Romero
No me parece buena idea dar estos curos en Visual Studio. Principalmente porque no te das cuenta oportunamente dónde está el error, tampoco puedes correr varias celdas a la vez para ir comparando, para explorar, para entender mejor el código.
Miller Puentes
Hola David, claro que lo puedes ver en VC, te sugiero instalar la extensión de jupiter notebook (.ipynb)
Miguel Angel Velazquez Romero
Para los que están en Linux, en Linux tenemos que poner el punto en el '.data/heart.csv No así:
dt_heart = pd.read_csv('.data/heart.csv')
Sino, así:
dt_heart = pd.read_csv('data/heart.csv')
O les saldrá este espantoso error 😱:
Nota: La última ejecución ya fue sin el punto y la antepenúltima fue con punto, jejeje.
Juan Jose Sepulveda Calderon
Me preguntaba por qué no había normalizado la variable y_target, pero cuando iba a hacer la pregunta me di cuenta de que era porque es categórica 😋. Por eso es importante analizar los datos ☝️.
Diego Alejandro Hernandez Londono
Buena explicación la de este profesor.
David Duque Uribe
Por qué importa primero la librería sklearn COMPLETA, y luego busca importar solo los módulos necesarios?
Claudio Chavarría Altamirano
no era necesario
Jason Sepulveda
X = df_heart.drop(columns=["target"]) y = df_heart["target"] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) scaler = StandardScaler() X_train_scaled = scaler.fit_transform(X_train) X_test_scaled = scaler.transform(X_test) ```Ese seria el orden correcto para esta clase
Juan Acevedo
Yes sr!!
Salvador Cardona Noriega
¿A qué se refiere específicamente en el minuto 7:13 con "Normalizar lo datos", cuál es el punto de este movimiento?
CRISTIAN BARBERO PÉREZ
Hola, cuando se habla de normalizar una distribución de probabilidad se refiere a que la suma (si es discreta) o la integral (si es continua) de todos los datos debe ser igual a 1, es decir, al 100%.
Por ejemplo si en un experimento solo puedes obtener los resultados A, B y C, la suma de las probabilidades de los 3 tiene que ser el 100%.
Entonces, imagina que obtienes el evento A 40 veces, el B 50 veces y el C 10 veces. Tendrías el dataset [40, 50, 10].
Para trabajar correctamente debes normalizar esos datos, dividiendo por el número total de eventos, en este caso por 100, entonces el dataset te quedaría [0.4, 0.5, 0.1].
Supongo que el profe se refiera a eso
Giovany samaca
hola @ceporro muchas gracias por la respuesta logre entender lo de dividir los datos nos podrias explicar por que es necesario normalizar los datos?? muchas gracias
Mario Emiliano Gordon Pico
Si deseo que el estado del split sea random no es necesario usar el número de random?
Gersonrpq
Correcto :ok_hand:
Ariel Ortiz Beltrán
Profesor¡En efecto! Eso permitirá probar diferentes configuraciones y tener una mejor perspectiva del modelo y su varianza. :)
Alexander Velasco
porque no hemos normalizado dr_target?
Fernando Jesús Núñez Valdez
Porque es una variable categorica. 0-1. Si fuera una variable continua, por ejemplo [30-985], entonces si se normalizria, pero esto ya seria un problema de LinearRegression y no uno de classificación, como lo es el LogisticRegression.
Carlos Isael Ramírez González
Este curso es una chulada, vengo del de fundamentos practicos de machine learning y no explico NADA sobre train_test_split, estuve como 10 min buscando cada funcion y con varias dudas, si tan solo hubiera tenido este video antes.
Julián Cárdenas
Es curioso y agradable haber visto todas las clases de Platzi hasta llegar hasta este punto y entender e incorporar todo lo aprendido <3
Les dejo el código comentado, por si no les corre compañeros:
# Importamos las bibliotecas generales import pandas as pd import sklearn import matplotlib.pyplot as plt # Importamos los módulos específicos from sklearn.decomposition import PCA from sklearn.decomposition import IncrementalPCA from sklearn.linear_model import LogisticRegression from sklearn.preprocessing import StandardScaler from sklearn.model_selection import train_test_split if __name__ == "__main__": # Cargamos los datos del dataframe de pandas dt_heart = pd.read_csv('data/heart.csv') # Imprimimos un encabezado con los primeros 5 registros print(dt_heart.head(5)) # Guardamos nuestro dataset sin la columna de target dt_features = dt_heart.drop(['target'], axis=1) # Este será nuestro dataset, pero sin la columna dt_target = dt_heart['target'] # Normalizamos los datos dt_features = StandardScaler().fit_transform(dt_features) # Partimos el conjunto de entrenamiento. Para añadir replicabilidad usamos el random state X_train, X_test, y_train, y_test = train_test_split(dt_features, dt_target, test_size=0.3, random_state=42)
¿Qué es normalizar los datos en ML?
Para que funcionen mejor muchos algoritmos de Machine Learning usados en Data Science, hay que normalizar las variables de entrada al algoritmo. Normalizar significa, en este caso, comprimir o extender los valores de la variable para que estén en un rango definido. Sin embargo, una mala aplicación de la normalización, o una elección descuidada del método de normalización puede arruinar tus datos, y con ello tu análisis.
Ejemplo visto en clase:
Escalado estándar (Standard Scaler)
Una alternativa al escalado de variables es usar otra técnica conocida como escalado estándar (a cada dato se le resta la media de la variable y se le divide por la desviación típica).
Imaginemos otro ejemplo. Vamos a medir cuánto se usa la palabra “resaca” en publicaciones de Facebook (datos reales). La frecuencia de uso de esta palabra tiene picos durante el fin de semana y valles entre semana. Los datos tienen valores anormalmente altos en fiestas como Halloween y Navidad.
Antes de normalizar, calculamos la media (5.55) y la desviación típica (10.53). Ya podemos ver que la media está en torno a 5, cuando nuestros datos sin anomalias no pasan de valores en torno al 4 (mala señal). Si aplicamos ahora la normalización estándar, tenemos lo siguiente.
Análisis similares se puede hacer para otros métodos de normalización: escalar sobre máximo, normalizer, escalado robusto, etc. Puedes consultar una versión extendida de este análisis en este enlace.
Bibliografía:
.
Exactamente, de esta manera:
# Spliting our data X_train, X_test, y_train, y_test = train_test_split( dt_features, dt_target, test_size= 0.3, random_state=42 ) # Scaling our data sc_x = StandardScaler().fit(X_train) X_train = sc_x.transform(X_train) X_test = sc_x.transform(X_test) print(X_train.shape) print(X_test.shape)