María José Medina
Para evitar que se muestren los warnings pueden ejecutar lo siguiente:
import warnings warnings.simplefilter("ignore")
Juan R. Vergara M.
Like 👍
Julián Cárdenas
Vea eso no lo sabía, ni lo había visto en ninguna clase !!
¿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!
María José Medina
Para evitar que se muestren los warnings pueden ejecutar lo siguiente:
import warnings warnings.simplefilter("ignore")
Juan R. Vergara M.
Like 👍
Julián Cárdenas
Vea eso no lo sabía, ni lo había visto en ninguna clase !!
Victor Gomez
Luis Ernesto Domínguez Velásquez
Excelente!!!
Jorge Briceño
Victor gracias por el aporte.
Natalia Caro Barrios
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())
Josue Farley Lopez Carvajal
Mauricio Barrera
Usuario anónimo
UserSalvador Cardona Noriega
Creí que el score se utilizaba más en las clasificaciones. Alguien sabe de esto?
Aaron Fabrizio Calderon Guillermo
Sí, SCORE / ACCURACY es para clasificaciones.
Gerardo Mayel Fernández Alamilla
para corregir el warning por sobre pasar el número de iteraciones en el entrenamiento :
HuberRegressor(epsilon=1.35, max_iter=10000)
Tomas Dale
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
David fernando Pinzon suarez
En mi caso al agregar LinearRegression() el error da mas bajo que con los otros? Por que?
================================================================ Linear MSE: 1.6188728452956844e-19
SVR MSE: 0.2014898236176083
RANSAC MSE: 1.6188745909774803e-19
Leandro Tenjo
💡Formato en el Print
print(f"MSE: {mean_squared_error(y_test, predictions):.20f}")
Tomas Dale
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()
Jhon Freddy Tavera Blandon
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.
Thomas Gonzalez Rodrigues
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
Aaron Fabrizio Calderon Guillermo
Si también eliminamos RANK:
SVR MSE: 0.005844139576335231 RANSAC MSE: 1.2666603654055215e-19 HUBER MSE: 4.756058064851233e-10
Jaime Arturo Blanco Gutiérrez
No he podido correrlo bien, me bota el siguiente error :
'ValueError: Found input variables with inconsistent numbers of samples: [133, 34]'
Alan Vazquez
Cual dataset usaste? Revisa como hiciste la reparacion de los datos de entrenamiento y de prueba y revisa el shape de los datos que estas introduciendo
El primer dato indica el numero de filas y el segundo el numero de columnas, en todo caso el numero de columnas que usas para entrenar tiene que ser las mismas para pruebas (Tanto en X como en Y)
Juan Acevedo
Ojo!! cuando tenemos pocos datos aplicar esto puede ser algo peligroso ya que estos modelos nos dan una salida muy lineal (Perfecta) lo que puede darnos informacion no tan real
Modelo Actual SVR MSE SVR: 0.0064715329296076264 R2 SVR: 0.9891514607425578 Modelo Actual RANSAC MSE RANSAC: 3.8105926975057787e-20 R2 RANSAC: 1.0 Modelo Actual Huber MSE Huber: 1.2946675156231008e-08 R2 Huber: 0.999999978296871
Dario vallejo
Es verdad que un R2 en 1 puede ser un warning ya que se puede presumir de overfitting sin embargo hay una manera de probar si hay overfitting o no:
rom sklearn.model_selection import KFold, cross_val_score
import numpy as np
# Using the scaled data for cross-validation
kf = KFold(n_splits=5, shuffle=True, random_state=42)
for key, estimator in estimators.items():
scores = cross_val_score(estimator, x, y, cv=kf, scoring='r2')
print(f"{key} R2 (cross-validated): {np.mean(scores):.4f} (+/- {np.std(scores):.4f})")
Cross validation se puede usar para calcular que tanta varianza hay segun diferentes datos de tests y datos de training, el toma k grupos de datos y los usa como datos de entrenamiento o de training segun el grupo k y le hace fit, se calcula el r2 con diferentes subconjuntos de datos y al final te entrega un promedio. Si el promedio sigue siendo 1 entonces es overfitting.
Mario Alexander Vargas Celis
Automatizar modelos de predicción en Python es una práctica clave en ciencia de datos y machine learning, especialmente cuando se desea escalar, repetir o integrar modelos en aplicaciones reales. A continuación, te explico los pasos, herramientas y un ejemplo completo para automatizar este proceso.
🧩 ¿Qué incluye la automatización de modelos?
🧰 Herramientas comunes para automatización
PasoHerramientas / LibreríasPreprocesamientopandas, sklearn.preprocessingModeladoscikit-learn, xgboost, lightgbmSelección de característicassklearn.feature_selection, Boruta, SelectKBestOptimización automáticaGridSearchCV, RandomizedSearchCV, OptunaAutoMLTPOT, H2O.ai, PyCaret, Auto-sklearnGuardado y desplieguejoblib, pickle, mlflow, FastAPI, Flask
🧪 Ejemplo: Pipeline de predicción automatizada con Scikit-learn
import pandas as pd from sklearn.model_selection import train_test_split, GridSearchCV from sklearn.preprocessing import StandardScaler from sklearn.ensemble import RandomForestClassifier from sklearn.pipeline import Pipeline from sklearn.metrics import classification_report import joblib
# Paso 1: Cargar datos df = pd.read_csv("datos.csv") X = df.drop("target", axis=1) y = df["target"]
# Paso 2: Separar datos X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Paso 3: Crear pipeline automatizado pipeline = Pipeline([ ('scaler', StandardScaler()), ('clf', RandomForestClassifier()) ])
# Paso 4: Definir parámetros para GridSearch param_grid = { 'clf__n_estimators': [100, 200], 'clf__max_depth': [5, 10] }
# Paso 5: Buscar el mejor modelo grid = GridSearchCV(pipeline, param_grid, cv=5, scoring='accuracy') grid.fit(X_train, y_train)
# Paso 6: Evaluar y_pred = grid.predict(X_test) print("Mejor modelo:", grid.best_params_) print(classification_report(y_test, y_pred))
# Paso 7: Guardar el modelo joblib.dump(grid.best_estimator_, 'modelo_automatizado.pkl')
⚡ Automatización con AutoML (ej. PyCaret)
from pycaret.classification import *
# Cargar datos data = pd.read_csv("datos.csv")
# Iniciar la configuración automática clf = setup(data, target='target')
# Comparar todos los modelos automáticamente best_model = compare_models()
# Finalizar entrenamiento y guardar final_model = finalize_model(best_model) save_model(final_model, 'modelo_pycaret')
🧠 ¿Cuándo automatizar?
✅ Ideal cuando:
Edgar A. Gonzalez Ambriz
No entendí. ¿El hecho de encontrar los errores cuadráticos medios de los regresores RANSAC y HUBER muy pequeños respecto al de SVR, implicó un impacto de los valores atípicos?. Gracias por la ayuda
Platzi
Sí, el hecho de encontrar errores cuadráticos medios muy pequeños en los regresores RANSAC y HUBER en comparación con SVR implica que estos modelos son más efectivos para lidiar con valores atípicos.
Giovany samaca
hola una pregunta ¿que diferencia hay entre score y accuracy??
Thomas Gonzalez Rodrigues
score es un método de un estimador que calcula una medicion la cual me dice que tan bien el modelo realiza la predicción, por ejemplo el estimador LInearRegresor al usar el método score calcula el R2, que te sirve para identificar al eficacia del modelo o compararlo con otros modelos también de regression .
sabiendo esto accuracy es otra medición que se puede realizar para comparar modelos en este caso de clasificación, por lo que al estar usando un estimador de classification como un random forest al llamar el metodo score se calculara el accuracy.
Daniel Andres Rojas Paredes
no me termina de quedar claro qeu es un estimador y cuales son sus caracteristicas generales.
ademas no se si entendi bien que : la diferencia entre un estimador y un hyperparametro es el contexto en el que funcionan, uno funciona en prediccion el otro en entrenamiento.
Jhosbyn Daniel Guillén Ortiz
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:
from sklearn.linear_model import HuberRegressor
model = HuberRegressor(max_iter=1000) # Aumentar iteraciones
model.fit(X, y)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")
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()
Hay una forma más corta usando la función squeeze:
Y = dataset[['score']].squeeze()
O simplemente cuando definen 'y' en lugar de usar 2 corchetes usan 1, para así generar una serie.
y = df['score']
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?