Aprender los conceptos clave

1

Procesamiento de Datos con Scikit-Learn para Machine Learning

2

Aprendizaje Supervisado: Datos y Observación

3

Modelos de Clasificación y Regresión con Scikit-learn

4

Matemáticas clave para dominar Machine Learning

Iniciar un proyecto con sklearn

5

Configuración Avanzada de Entornos de Desarrollo en Visual Studio Code

6

Verificación de Librerías para Desarrollo en Python

7

Análisis de Datos para la Felicidad y Salud Cardiaca

Optimización de features

8

Elementos Clave para Mejorar Modelos de Machine Learning

9

Reducción de Dimensionalidad: Análisis de Componentes Principales

10

Optimización de Modelos en Python: Uso de PCA y Regresión Logística

11

Clasificación Binaria con PCA y Regresión Logística

12

Análisis de Kernel: Modelos de Clasificación Avanzada

13

Regularización en Machine Learning: Lasso y Ridge

14

Regularización: Lasso y Ridge para predicción efectiva

15

Regresión Lineal: Minimización de Pérdidas y Coeficientes

16

Regularización ElasticNet: Combinando Lasso y Ridge en Scikit-learn

Regresiones robustas

17

Identificación de datos atípicos en análisis estadístico

18

Regresiones robustas: técnicas para manejar valores atípicos

19

Regresión Lineal y Máquinas de Soporte: Lidando con Datos Corruptos

20

Automatización de Código para Modelos Predictivos en Python

Métodos de ensamble aplicados a clasificación

21

Esamblaje de Modelos de Machine Learning: Bagging y Boosting

22

Clasificación Binaria con Bagging Classifier en Scikit-Learn

23

Implementación de métodos de ensamble en Python

24

Clasificación con Gradient Boosting en Datos de Enfermedades Cardíacas

Clustering

25

Agrupamiento de Datos: Clustering No Supervisado

26

"Algoritmos de Clustering: Agrupación de Datos con K-Means"

27

Agrupamiento de Datos Usando MeanShift en Python

Optimización paramétrica

28

Validación Cruzada en Modelos de Aprendizaje Automático

29

Validación Cruzada con Scikit-learn y Árboles de Decisión

30

Optimización de Modelos con Grid Search y Random Search

31

Optimización de Modelos con Random Forest en Python

32

Auto-sklearn: Optimización Automática de Modelos de Machine Learning

Salida a producción

33

Estructura de Proyecto en Python: Organiza y Optimiza tu Código

34

Programación Orientada a Objetos con Python Avanzado

35

Creación de Servidor Web con Flask en Python

36

Modelos de Machine Learning: Selección y Optimización

37

Python para Análisis de Datos Financieros

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Automatización de Código para Modelos Predictivos en Python

20/37
Recursos

¿Cómo automatizar nuestro código para estimadores robustos?

Cuando trabajamos con estimadores robustos en ciencia de datos, es fundamental buscar la automatización y eficiencia en nuestro código. A medida que los modelos de machine learning se vuelven más complejos, necesitamos optimizarlos de manera que los procesos se manejen sin demasiada intervención manual. Este enfoque no solo nos ahorra tiempo, sino que también minimiza errores humanos. Exploremos cómo estructurar los diccionarios de estimadores y cómo los detallamos en el código.

¿Cómo estructuramos diccionarios de estimadores?

En el desarrollo de modelos predictivos, un paso clave es definir un diccionario de estimadores. En Python, este diccionario se compone de pares de llaves y valores. La flexibilidad de Python permite que las funciones devuelvan múltiples valores, una característica útil que aprovechemos para operar de manera eficiente.

A continuación, se asocia cada llave con una variable para operar secuencialmente con los estimadores:

for clave, estimador in diccionario_estimadores.items():
    nombre = clave
    modelo = estimador

Este método nos ofrece un flujo de trabajo más organizado y evita la implementación de funciones específicas para cada caso, gracias a que todos los estimadores comparten una interfaz común de funciones.

¿Cómo entrenamos y predecimos con los modelos?

Para poner en práctica nuestros estimadores, primero es necesario ajustar nuestros datos de entrenamiento y obtener predicciones. Utilizaremos las funciones fit para ajustar y predict para generar predicciones sobre un conjunto de prueba:

modelo.fit(X_train, y_train)
predicciones = modelo.predict(X_test)

Estas funciones son fundamentales para cualquier pipeline de machine learning, permitiendo ajustar los modelos con nuestros datos de entrada y predecir con base en estos ajustes.

¿Cómo evaluamos el rendimiento de nuestros estimadores?

Una parte crucial en el desarrollo de modelos es medir su rendimiento. En este contexto, el error cuadrático medio (MSE) se utiliza como una métrica de evaluación:

from sklearn.metrics import mean_squared_error

error = mean_squared_error(y_test, predicciones)
print(f"Estimador: {nombre}, Error Medio Cuadrado: {error}")

Esta métrica nos ayuda a cuantificar qué tan lejos están nuestras predicciones de los valores reales, simplificando el proceso de evaluación y ajuste subsecuente del modelo.

¿Cómo interpretamos los resultados de los estimadores?

Es importante prestar atención a los detalles cuando interpretamos los resultados. Diferencias en el formato pueden llevar a malentendidos. Por ejemplo, al comparar errores muy pequeños, estos pueden estar elevados a una potencia negativa, indicando que son menores de lo que parecen a primera vista. Es esencial formatear y leer la salida correctamente para evitar conclusiones erróneas.

La automatización del código no sólo mejora la eficiencia del proceso de modelado, sino que también asegura consistencia y precisión. Estar atentos a los valores atípicos y su efecto en el rendimiento del modelo es igualmente crucial para obtener modelos fiables. Sigue este camino de aprendizaje y experimentación para convertirte en un experto en machine learning. ¡Éxito en tu aprendizaje!

Aportes 20

Preguntas 3

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Para evitar que se muestren los warnings pueden ejecutar lo siguiente:

import warnings
warnings.simplefilter("ignore")

Codigo para ver la comparacion entre las regresiones de forma grafica:

import matplotlib.pyplot as plt

for name, estimador in estimadores.items():
    estimador.fit(X_train, y_train)
    predictions = estimador.predict(X_test)
    print("=" * 32)
    print(name)
    plt.ylabel('Predicted Score')
    plt.xlabel('Real Score')
    plt.title('Predicted VS Real')
    plt.scatter(y_test, predictions)
    plt.plot(predictions, predictions,'r--')
    plt.show()

El primer warning que sale, sobre el array de una dimensión se puede corregir usando numpy y la función ravel, de esta manera:

estimador.fit(x_train, np.array(y_train).ravel())

Hasta el momento, el mejor curso de Machine Learning!
solo que no es para los que apenas empiezan, creo que minino deben de tener conocimiento de otros cursos 😛

Hola!
En esta clase, además de calcular error de cada estimador, intenté calcular también es “score” de cada modelo. Como resultado obtuve esto.

    print("MSE: ", mean_squared_error(Y_test, predictions))
    print("Score", estimador.score(X_test, Y_test))
SVR
MSE:  0.024636332906412182
Score 0.9780019790127239
RANSAC
MSE:  1.1899164154047088e-19
Score 1.0
Huber
MSE:  1.4911035802611992e-06
Score 0.9999986685791276

Como pueden observar, con el metaestimador RANSAC obtengo un score del 100%. Desde mi punto de vista, esto debería considerarse un resultado muy optimista y que se debe de “tomarlos con pinzas” ( o con cuidado). ¿A ustedes qué les parece?

para corregir el warning por sobre pasar el número de iteraciones en el entrenamiento :

HuberRegressor(epsilon=1.35, max_iter=10000)

Un resumen de esta seccion

En regresion lineal podemos utilizar otros estimadores para evaluar el MSE (error)

-SVR
-RANSAC
-HUBER

Escogemos entre los 3 el que nos de el menor valor de error.

Es de tener cuidado que el menor estimador puede estar en notacion cientifica

Agrupando varios aportes, con google collab

import pandas as pd

from sklearn.linear_model import (
RANSACRegressor, HuberRegressor
)

Compararemos RANSAC y Huber contra SVM

from sklearn.svm import SVR

from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error

import matplotlib.pyplot as plt

dataset = pd.read_csv(‘felicidad_corrupt.csv’)

dataset.head(5)

#axis=1 columnas axis=0 filas
x = dataset.drop([‘country’,‘score’],axis=1)
y= dataset[[‘score’]]

x_train, x_test, y_train, y_test = train_test_split(x,y, test_size=0.3, random_state=42)

#Eliminar warnings
import warnings
warnings.simplefilter(“ignore”)

#4 ESTIMADORES EN DICCIONARIO, [LLAVE, VALORES]
estimadores = {
#‘Linear’: LinearRegression(),

'SVR': SVR(gamma= 'auto', C=1.0, epsilon=0.1),

 #sin parametro es estimacion lineal
'RANSAC': RANSACRegressor(),   

#epsilon menor toma menos valores atipicos
'HUBER': HuberRegressor(epsilon=1.35)

}

for name, estimador in estimadores.items():

estimador.fit(x_train, y_train)
predictions = estimador.predict(x_test)

#print predictor con error
print("=" * 32)
print(name," MSE :", mean_squared_error(y_test, predictions))

#grafico
plt.ylabel('Predicted Score')
plt.xlabel('Real Score')
plt.title('Predicted VS Real')
plt.scatter(y_test, predictions)
plt.plot(predictions, predictions,'r--')
plt.show()

La regresión robusta es una técnica que maneja los valores atípicos o ruidosos en los datos al realizar el ajuste del modelo. Scikit-learn proporciona varios modelos para regresión robusta, incluyendo RANSACRegressory HuberRegressor. Estos modelos son útiles cuando se espera que los datos contengan valores atípicos que puedan afectar el rendimiento del modelo de regresión lineal.

💡Formato en el Print

 print(f"MSE:  {mean_squared_error(y_test, predictions):.20f}")

realize una prueba de los estimadores con un df con 10 filas de 0 al final y una sin ella, con lo que se ve la efectividad de cada uno de los regresores al manejar outliers

Si también eliminamos RANK:

SVR
MSE: 0.005844139576335231
RANSAC
MSE: 1.2666603654055215e-19
HUBER
MSE: 4.756058064851233e-10

No he podido correrlo bien, me bota el siguiente error :

‘ValueError: Found input variables with inconsistent numbers of samples: [133, 34]’

La advertencia ocurre porque se alcanzó el máximo de las iteraciones permitidas para converger en la solución en el modelo de HubberRegressor (Es donde la función de perdida no cambia significativamente por cada iteración) Se puede solventar: 1. Aumentando el máximo de iteraciones, pero aumenta es coste computacional `from sklearn.linear_model import HuberRegressor` `model = HuberRegressor(max_iter=1000) # Aumentar iteraciones` `model.fit(X, y)` 2. O escalando los datos `from sklearn.preprocessing import StandardScaler` `scaler = StandardScaler()` `X_scaled = scaler.fit_transform(X)` `model.fit(X_scaled, y)` Ya como última opción, se pueden ocultar las advertencías. `import warnings` `warnings.simplefilter("ignore")`

Hay una funcion interesante, gridsearchCV, que te ayuda , realizando previamente un pipeline, a realizar pruebas con distintos parametros par estimadores y este algoritmo te selecciona el optimo entre todos

Cómo se explica que al evaluar también la regresión lineal:

estimators = {
    'Linear': LinearRegression(),
    'SVR': SVR(gamma= 'auto', C=1.0, epsilon=0.1),
    'RANSAC': RANSACRegressor(),
    'HUBER': HuberRegressor(epsilon=1.35)
}

Linear MSE: 0.00000000000000000013
SVR MSE: 0.07455771301888525215
RANSAC MSE: 0.00000000000000000013
HUBER MSE: 0.00000229719234639414

.
El resultado de la lineal sea menor que SVR y HUBER, e igual a RANSAC? No debería ser peor por la presencia de los outliers?

Para graficas los 3 modelos y en resumen, SVR parece tener un MSE razonablemente bajo, lo que sugiere un buen rendimiento en la predicción de tus datos.

Por otro lado, tanto RANSAC como HUBER tienen MSE muy cercanos a cero, lo que podría indicar sobreajuste.

import matplotlib.pyplot as plt

fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(18, 6)) # 1 fila, 3 columnas

for idx, (name, estimador) in enumerate(estimadores.items()):
estimador.fit(X_train, y_train)
predictions = estimador.predict(X_test)

axes[idx].set_title(name)
axes[idx].set_ylabel('Predicted Score')
axes[idx].set_xlabel('Real Score')

axes[idx].scatter(y_test, predictions)
axes[idx].plot(predictions, predictions, 'r--')

plt.suptitle(‘Predicted vs. Real Score for Different Models’, fontsize=16)

plt.tight_layout()
plt.show()

Estos son mis resultados para el Mean Squared Error de cada uno de los estimadores, junto con el R2 score. Se puede observar que los valores están muy cerca del 1.0. Lo que sugiere que se está generando overfitting.

Para formatear
print(“error medio cuadrado:” , “%.10f” % float (mean_squared_error(y_test , predictions)))

Esta fue la forma que arregle el error en Huber Regressor

en la parte donde esta el diccionario asi lo arregle

'HUBER':HuberRegressor(epsilon=1.35,max_iter=10000)

y en la iteraacion del for asi lo hice

estimador.fit(X_train,Y_train.values.ravel())