Title: Openai/6907fa8a-e344-8008-8a25-8d456370c8d6 - freem URL Source: https://freemwiki.com/index.php?oldid=593531&title=Openai%2F6907fa8a-e344-8008-8a25-8d456370c8d6 Markdown Content: _This conversation was exported from ChatGPT_[[1]](https://freemwiki.com/index.php?oldid=593531&title=Openai%2F6907fa8a-e344-8008-8a25-8d456370c8d6#cite_note-1) ## gpt-5-mini[[edit](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&veaction=edit§ion=1 "Edit section: gpt-5-mini") | [edit source](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&action=edit§ion=1 "Edit section's source code: gpt-5-mini")] ### User: hola, estamos trabajando en redes neuronales multicapa, tenemos que entrenar una red multicapa para que realice una tar…[[edit](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&veaction=edit§ion=2 "Edit section: User: hola, estamos trabajando en redes neuronales multicapa, tenemos que entrenar una red multicapa para que realice una tar…") | [edit source](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&action=edit§ion=2 "Edit section's source code: User: hola, estamos trabajando en redes neuronales multicapa, tenemos que entrenar una red multicapa para que realice una tar…")] hola, estamos trabajando en redes neuronales multicapa, tenemos que entrenar una red multicapa para que realice una tarea de regresión ### Assistant: ¡Perfecto![[edit](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&veaction=edit§ion=3 "Edit section: Assistant: ¡Perfecto!") | [edit source](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&action=edit§ion=3 "Edit section's source code: Assistant: ¡Perfecto!")] ¡Perfecto! Vamos a enfocarnos en cómo entrenar una red neuronal multicapa (MLP) para un problema de regresión. Te voy a explicar paso a paso. ##### - Clasificación: salida discreta (ej. 0 o 1, rojo o azul). Para esto MLPClassifier de scikit-learn.[[edit](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&veaction=edit§ion=4 "Edit section: - Clasificación: salida discreta (ej. 0 o 1, rojo o azul). Para esto MLPClassifier de scikit-learn.") | [edit source](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&action=edit§ion=4 "Edit section's source code: - Clasificación: salida discreta (ej. 0 o 1, rojo o azul). Para esto MLPClassifier de scikit-learn.")] * Regresión: salida continua (ej. predicción de precio, temperatura, etc.). Para esto usamos MLPRegressor de scikit-learn. ##### Si queremos redes neuronales para regresión:[[edit](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&veaction=edit§ion=5 "Edit section: Si queremos redes neuronales para regresión:") | [edit source](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&action=edit§ion=5 "Edit section's source code: Si queremos redes neuronales para regresión:")] from sklearn.neural_network import MLPRegressor Otras técnicas de regresión en scikit-learn (no redes) son: * LinearRegression → regresión lineal simple o múltiple. * Ridge → regresión lineal con regularización L2. * Lasso → regresión lineal con regularización L1. * DecisionTreeRegressor → árbol de decisión para regresión. * RandomForestRegressor → ensamble de árboles de decisión. * KNeighborsRegressor → k vecinos más cercanos. * SVR → máquina de soporte vectorial para regresión. ##### Supongamos que tenemos datos X (features) y y (target continuo):[[edit](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&veaction=edit§ion=6 "Edit section: Supongamos que tenemos datos X (features) y y (target continuo):") | [edit source](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&action=edit§ion=6 "Edit section's source code: Supongamos que tenemos datos X (features) y y (target continuo):")] from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler === Dividir datos === X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) === Escalar características (muy importante en MLP) === scaler = StandardScaler() X_train = scaler.fit_transform(X_train) X_test = scaler.transform(X_test) ===== from sklearn.neural_network import MLPRegressor ===== === Crear el modelo === mlp = MLPRegressor(hidden_layer_sizes=(50, 30), # dos capas ocultas con 50 y 30 neuronas activation='relu', # función de activación solver='adam', # optimizador max_iter=1000, # iteraciones random_state=42) === Entrenar === mlp.fit(X_train, y_train) ===== from sklearn.metrics import mean_squared_error, r2_score ===== y_pred = mlp.predict(X_test) mse = mean_squared_error(y_test, y_pred) r2 = r2_score(y_test, y_pred) print("MSE:", mse) print("R^2:", r2) * MSE (Mean Squared Error): mientras más bajo, mejor. * R²: cercano a 1 → buen ajuste. Si quieres, puedo armarte un ejemplo completo con datos simulados para que lo pongas directamente en Python y entrenes tu primera red de regresión paso a paso. ¿Quieres que haga eso? ### User: Para la clase MLPClassifier de scikit-learn sklearn la cual provee una red neuronal multicapa para realizar clasificac…[[edit](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&veaction=edit§ion=7 "Edit section: User: Para la clase MLPClassifier de scikit-learn sklearn la cual provee una red neuronal multicapa para realizar clasificac…") | [edit source](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&action=edit§ion=7 "Edit section's source code: User: Para la clase MLPClassifier de scikit-learn sklearn la cual provee una red neuronal multicapa para realizar clasificac…")] Para la clase MLPClassifier de scikit-learn (sklearn) la cual provee una red neuronal multicapa para realizar clasificación, ¿Qué clases de esa librería nos proveen redes neuronales, pero para regresión? ### Assistant: ¡Perfecto![[edit](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&veaction=edit§ion=8 "Edit section: Assistant: ¡Perfecto!") | [edit source](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&action=edit§ion=8 "Edit section's source code: Assistant: ¡Perfecto!")] ¡Perfecto! Vamos a responder con precisión. En scikit-learn, la clase que sirve para redes neuronales multicapa en tareas de regresión es: from sklearn.neural_network import MLPRegressor ##### - MLPClassifier → para clasificación (salida discreta, etiquetas).[[edit](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&veaction=edit§ion=9 "Edit section: - MLPClassifier → para clasificación (salida discreta, etiquetas).") | [edit source](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&action=edit§ion=9 "Edit section's source code: - MLPClassifier → para clasificación (salida discreta, etiquetas).")] * MLPRegressor → para regresión (salida continua, valores numéricos). Ambas clases son parte del módulo sklearn.neural_network y permiten: * Definir capas ocultas (hidden_layer_sizes) * Elegir función de activación (relu, tanh, etc.) * Seleccionar el optimizador (adam, sgd, etc.) Entonces, la respuesta exacta es `MLPRegressor`. Si quieres, puedo mostrar un ejemplo de cómo usar `MLPRegressor` paso a paso para una tarea de regresión. ¿Quieres que lo haga? ### User: ¿Qué clases de esa librería proveen otras técnicas de machine learning para problemas de regresión?[[edit](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&veaction=edit§ion=10 "Edit section: User: ¿Qué clases de esa librería proveen otras técnicas de machine learning para problemas de regresión?") | [edit source](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&action=edit§ion=10 "Edit section's source code: User: ¿Qué clases de esa librería proveen otras técnicas de machine learning para problemas de regresión?")] ¿Qué clases de esa librería proveen otras técnicas de machine learning para problemas de regresión? ### Assistant: ¡Claro![[edit](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&veaction=edit§ion=11 "Edit section: Assistant: ¡Claro!") | [edit source](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&action=edit§ion=11 "Edit section's source code: Assistant: ¡Claro!")] ¡Claro! En scikit-learn, aparte de redes neuronales, hay muchas clases que implementan otras técnicas de machine learning para regresión. Te las clasifico por tipo de modelo: ##### - LinearRegression → regresión lineal básica.[[edit](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&veaction=edit§ion=12 "Edit section: - LinearRegression → regresión lineal básica.") | [edit source](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&action=edit§ion=12 "Edit section's source code: - LinearRegression → regresión lineal básica.")] * Ridge → regresión lineal con regularización L2. * Lasso → regresión lineal con regularización L1. * ElasticNet → combina L1 y L2. * SGDRegressor → regresión lineal entrenada por descenso de gradiente estocástico. ##### - DecisionTreeRegressor → árbol de decisión para regresión.[[edit](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&veaction=edit§ion=13 "Edit section: - DecisionTreeRegressor → árbol de decisión para regresión.") | [edit source](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&action=edit§ion=13 "Edit section's source code: - DecisionTreeRegressor → árbol de decisión para regresión.")] * RandomForestRegressor → bosque aleatorio (ensamble de árboles). * GradientBoostingRegressor → boosting de árboles (GBM). * HistGradientBoostingRegressor → versión más rápida de boosting de árboles. * ExtraTreesRegressor → ensamble de árboles con más aleatoriedad. ##### - KNeighborsRegressor → predicción basada en los k vecinos más cercanos.[[edit](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&veaction=edit§ion=14 "Edit section: - KNeighborsRegressor → predicción basada en los k vecinos más cercanos.") | [edit source](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&action=edit§ion=14 "Edit section's source code: - KNeighborsRegressor → predicción basada en los k vecinos más cercanos.")] ##### - SVR → Support Vector Regression (versión de SVM para regresión).[[edit](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&veaction=edit§ion=15 "Edit section: - SVR → Support Vector Regression (versión de SVM para regresión).") | [edit source](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&action=edit§ion=15 "Edit section's source code: - SVR → Support Vector Regression (versión de SVM para regresión).")] ##### - GaussianProcessRegressor → regresión usando procesos gaussianos.[[edit](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&veaction=edit§ion=16 "Edit section: - GaussianProcessRegressor → regresión usando procesos gaussianos.") | [edit source](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&action=edit§ion=16 "Edit section's source code: - GaussianProcessRegressor → regresión usando procesos gaussianos.")] Si quieres, puedo hacer una tabla resumida que muestre todas las clases de regresión de scikit-learn, indicando tipo de modelo y cuándo conviene usarla, para que lo tengas bien organizado. ¿Quieres que haga esa tabla? ### User: Escogimos un conjunto de datos del repositorio UCI: Wine Quality, ¿En qué consiste el problema de regresión de ese conj…[[edit](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&veaction=edit§ion=17 "Edit section: User: Escogimos un conjunto de datos del repositorio UCI: Wine Quality, ¿En qué consiste el problema de regresión de ese conj…") | [edit source](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&action=edit§ion=17 "Edit section's source code: User: Escogimos un conjunto de datos del repositorio UCI: Wine Quality, ¿En qué consiste el problema de regresión de ese conj…")] Escogimos un conjunto de datos del repositorio UCI: Wine Quality, ¿En qué consiste el problema de regresión de ese conjunto? ### Assistant: ¡Perfecto![[edit](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&veaction=edit§ion=18 "Edit section: Assistant: ¡Perfecto!") | [edit source](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&action=edit§ion=18 "Edit section's source code: Assistant: ¡Perfecto!")] ¡Perfecto! El conjunto de datos Wine Quality del repositorio UCI es un ejemplo clásico para regresión y clasificación, dependiendo de cómo quieras plantearlo. Vamos a enfocarnos en la regresión: ##### - Contiene datos de vinos tintos y/o blancos.[[edit](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&veaction=edit§ion=19 "Edit section: - Contiene datos de vinos tintos y/o blancos.") | [edit source](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&action=edit§ion=19 "Edit section's source code: - Contiene datos de vinos tintos y/o blancos.")] * Cada registro (fila) representa un vino diferente. * Las características (features) son propiedades fisicoquímicas del vino, por ejemplo: - fixed acidity → acidez fija - volatile acidity → acidez volátil - citric acid → ácido cítrico - residual sugar → azúcar residual - chlorides → cloruros - density → densidad - pH → nivel de pH - sulphates → sulfatos - alcohol → porcentaje de alcohol * La variable objetivo (target) es: - quality → puntuación de calidad del vino, en un rango generalmente de 0 a 10. ##### En regresión, el objetivo es predecir la puntuación de calidad del vino como un valor continuo, usando las propiedades fisicoquímicas como entradas.[[edit](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&veaction=edit§ion=20 "Edit section: En regresión, el objetivo es predecir la puntuación de calidad del vino como un valor continuo, usando las propiedades fisicoquímicas como entradas.") | [edit source](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&action=edit§ion=20 "Edit section's source code: En regresión, el objetivo es predecir la puntuación de calidad del vino como un valor continuo, usando las propiedades fisicoquímicas como entradas.")] * Entrada (X): características fisicoquímicas (acidez, alcohol, azúcar, etc.) * Salida (y): calidad del vino (número, normalmente entero, pero para regresión se trata como continuo) Ejemplo: Si tenemos un vino con ciertas características, queremos que la red neuronal prediga su calidad estimada (por ejemplo, 6.8). ##### - La variable objetivo es numérica, no categórica.[[edit](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&veaction=edit§ion=21 "Edit section: - La variable objetivo es numérica, no categórica.") | [edit source](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&action=edit§ion=21 "Edit section's source code: - La variable objetivo es numérica, no categórica.")] * Permite medir error absoluto, MSE, R², etc. * Se pueden probar diferentes modelos de regresión, incluidas redes neuronales multicapa. Si quieres, puedo hacer un ejemplo completo de código en Python usando MLPRegressor con este conjunto de datos, listo para entrenar y evaluar la red. Esto te daría un flujo completo paso a paso. ¿Quieres que haga eso? ### User: Genera una libreta en Python ya sea de Jupyter o Google Colab que haga lo siguiente:[[edit](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&veaction=edit§ion=22 "Edit section: User: Genera una libreta en Python ya sea de Jupyter o Google Colab que haga lo siguiente:") | [edit source](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&action=edit§ion=22 "Edit section's source code: User: Genera una libreta en Python ya sea de Jupyter o Google Colab que haga lo siguiente:")] Genera una libreta en Python (ya sea de Jupyter o Google Colab) que haga lo siguiente: Leer el conjunto de datos que escogiste utilizando la librería Pandas. Dividir el conjunto de datos en conjunto de entrenamiento y conjunto de prueba. Realizar normalización y estandarización, en caso de ser necesario. Entrenar un modelo de aprendizaje con una red neuronal multicapa (usa sklearn). Evaluar el modelo de aprendizaje generado (utiliza el conjunto de prueba y alguna de las métricas que enumeraste en el ejercicio anterior). Entrenar y evaluar otro modelo con alguna otra técnica de aprendizaje máquina. Mostrar una gráfica de caja-bigote que compare los resultados obtenidos por la red neuronal y esta otra técnica. ### Assistant: ¡Genial![[edit](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&veaction=edit§ion=23 "Edit section: Assistant: ¡Genial!") | [edit source](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&action=edit§ion=23 "Edit section's source code: Assistant: ¡Genial!")] ¡Genial! Te voy a generar un notebook completo en Python que puedes abrir en Jupyter o Google Colab. Este notebook: * Carga el dataset Wine Quality desde UCI. * Divide los datos en entrenamiento y prueba. * Normaliza las características. * Entrena un MLPRegressor (red neuronal multicapa). * Entrena un RandomForestRegressor como segunda técnica de ML. * Evalúa ambos modelos con MSE y R². * Muestra una gráfica de caja-bigote comparando los errores. Aquí tienes el código listo para notebook: # Wine_Quality_Regresion.ipynb === ========================== === === 1️⃣ Librerías === === ========================== === import pandas as pd import numpy as np from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.neural_network import MLPRegressor from sklearn.ensemble import RandomForestRegressor from sklearn.metrics import mean_squared_error, r2_score import matplotlib.pyplot as plt import seaborn as sns === ========================== === === 2️⃣ Cargar dataset === === ========================== === === URL del dataset Wine Quality (vino tinto) === url = "https://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-red.csv" df = pd.read_csv(url, sep=';') === Verificar datos === print("Primeras filas del dataset:") print(df.head()) print("\nInformación del dataset:") print(df.info()) print("\nEstadísticas descriptivas:") print(df.describe()) === ========================== === === 3️⃣ Separar features y target === === ========================== === X = df.drop("quality", axis=1) y = df["quality"] === ========================== === === 4️⃣ Dividir en entrenamiento y prueba === === ========================== === X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) === ========================== === === 5️⃣ Normalización / estandarización === === ========================== === scaler = StandardScaler() X_train_scaled = scaler.fit_transform(X_train) X_test_scaled = scaler.transform(X_test) === ========================== === === 6️⃣ Entrenar MLPRegressor === === ========================== === mlp = MLPRegressor(hidden_layer_sizes=(50, 30), activation='relu', solver='adam', max_iter=1000, random_state=42) mlp.fit(X_train_scaled, y_train) === Predicciones === y_pred_mlp = mlp.predict(X_test_scaled) === Evaluación === mse_mlp = mean_squared_error(y_test, y_pred_mlp) r2_mlp = r2_score(y_test, y_pred_mlp) print("\n--- MLPRegressor ---") print(f"MSE: {mse_mlp:.4f}") print(f"R²: {r2_mlp:.4f}") === ========================== === === 7️⃣ Entrenar RandomForestRegressor === === ========================== === rf = RandomForestRegressor(n_estimators=100, random_state=42) rf.fit(X_train, y_train) === Predicciones === y_pred_rf = rf.predict(X_test) === Evaluación === mse_rf = mean_squared_error(y_test, y_pred_rf) r2_rf = r2_score(y_test, y_pred_rf) print("\n--- RandomForestRegressor ---") print(f"MSE: {mse_rf:.4f}") print(f"R²: {r2_rf:.4f}") === ========================== === === 8️⃣ Gráfica comparativa de errores === === ========================== === errors = pd.DataFrame({ "MLPRegressor": np.abs(y_test - y_pred_mlp), "RandomForest": np.abs(y_test - y_pred_rf) }) plt.figure(figsize=(8,6)) sns.boxplot(data=errors) plt.title("Comparación de errores absolutos entre modelos") plt.ylabel("Error absoluto") plt.show() ✅ Detalles importantes: * La columna quality es la variable continua que queremos predecir. * Para la red neuronal usamos MLPRegressor con 2 capas ocultas (50 y 30 neuronas). * Como segunda técnica elegí RandomForestRegressor porque funciona bien para regresión y es fácil de interpretar. * La gráfica boxplot compara el error absoluto de cada modelo sobre el conjunto de prueba. Si quieres, puedo hacer otra versión optimizando los hiperparámetros del MLP para que la red neuronal tenga mejor desempeño y luego actualizar la gráfica comparativa. ¿Quieres que haga eso? ### User: Me lo puedes explicar, porfavor[[edit](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&veaction=edit§ion=24 "Edit section: User: Me lo puedes explicar, porfavor") | [edit source](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&action=edit§ion=24 "Edit section's source code: User: Me lo puedes explicar, porfavor")] Me lo puedes explicar, porfavor ### Assistant: ¡Claro![[edit](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&veaction=edit§ion=25 "Edit section: Assistant: ¡Claro!") | [edit source](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&action=edit§ion=25 "Edit section's source code: Assistant: ¡Claro!")] ¡Claro! Vamos a desglosar paso a paso lo que hace cada sección del notebook que te pasé, para que entiendas todo el flujo de trabajo: #### 1️⃣ Librerías[[edit](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&veaction=edit§ion=26 "Edit section: 1️⃣ Librerías") | [edit source](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&action=edit§ion=26 "Edit section's source code: 1️⃣ Librerías")] import pandas as pd import numpy as np from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.neural_network import MLPRegressor from sklearn.ensemble import RandomForestRegressor from sklearn.metrics import mean_squared_error, r2_score import matplotlib.pyplot as plt import seaborn as sns * pandas → para manejar los datos como tablas (DataFrames). * numpy → operaciones numéricas. * train_test_split → divide los datos en entrenamiento y prueba. * StandardScaler → estandariza los datos (media=0, desviación estándar=1), importante para redes neuronales. * MLPRegressor → red neuronal multicapa para regresión. * RandomForestRegressor → otro modelo de regresión basado en árboles. * mean_squared_error, r2_score → métricas para evaluar el rendimiento. * matplotlib y seaborn → gráficos. #### 2️⃣ Cargar dataset[[edit](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&veaction=edit§ion=27 "Edit section: 2️⃣ Cargar dataset") | [edit source](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&action=edit§ion=27 "Edit section's source code: 2️⃣ Cargar dataset")] url = "https://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-red.csv" df = pd.read_csv(url, sep=';') * Descargamos los datos desde el repositorio UCI. * sep=';' porque el CSV usa punto y coma como separador. * Luego imprimimos df.head() y df.describe() para ver cómo son los datos. Qué contiene: * Columnas con propiedades químicas del vino (alcohol, pH, sulphates, etc.). * Columna quality → la puntuación del vino, nuestra variable objetivo. #### 3️⃣ Separar features y target[[edit](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&veaction=edit§ion=28 "Edit section: 3️⃣ Separar features y target") | [edit source](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&action=edit§ion=28 "Edit section's source code: 3️⃣ Separar features y target")] X = df.drop("quality", axis=1) y = df["quality"] * X → todas las columnas que usaremos para predecir (features). * y → la columna que queremos predecir (target). #### 4️⃣ Dividir en entrenamiento y prueba[[edit](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&veaction=edit§ion=29 "Edit section: 4️⃣ Dividir en entrenamiento y prueba") | [edit source](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&action=edit§ion=29 "Edit section's source code: 4️⃣ Dividir en entrenamiento y prueba")] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) * 80% de los datos para entrenamiento, 20% para prueba. * random_state=42 → asegura reproducibilidad. #### 5️⃣ Normalización / Estandarización[[edit](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&veaction=edit§ion=30 "Edit section: 5️⃣ Normalización / Estandarización") | [edit source](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&action=edit§ion=30 "Edit section's source code: 5️⃣ Normalización / Estandarización")] scaler = StandardScaler() X_train_scaled = scaler.fit_transform(X_train) X_test_scaled = scaler.transform(X_test) * Escalamos los datos para que todas las variables estén en la misma escala. * Muy importante para redes neuronales porque facilita el aprendizaje y evita que variables con valores grandes dominen. #### 6️⃣ Entrenar MLPRegressor[[edit](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&veaction=edit§ion=31 "Edit section: 6️⃣ Entrenar MLPRegressor") | [edit source](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&action=edit§ion=31 "Edit section's source code: 6️⃣ Entrenar MLPRegressor")] mlp = MLPRegressor(hidden_layer_sizes=(50, 30), activation='relu', solver='adam', max_iter=1000, random_state=42) mlp.fit(X_train_scaled, y_train) * Creamos la red neuronal multicapa: - 2 capas ocultas con 50 y 30 neuronas. - Función de activación relu. - Optimización con adam. * max_iter=1000 → máximo de iteraciones para entrenar. * fit() → entrenamos el modelo con los datos escalados. Predicción y evaluación: y_pred_mlp = mlp.predict(X_test_scaled) mse_mlp = mean_squared_error(y_test, y_pred_mlp) r2_mlp = r2_score(y_test, y_pred_mlp) * MSE → error cuadrático medio (mientras más bajo, mejor). * R² → qué tanto el modelo explica la variabilidad del target (1 = perfecto). #### 7️⃣ Entrenar RandomForestRegressor[[edit](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&veaction=edit§ion=32 "Edit section: 7️⃣ Entrenar RandomForestRegressor") | [edit source](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&action=edit§ion=32 "Edit section's source code: 7️⃣ Entrenar RandomForestRegressor")] rf = RandomForestRegressor(n_estimators=100, random_state=42) rf.fit(X_train, y_train) y_pred_rf = rf.predict(X_test) * RandomForest → conjunto de árboles de decisión. * n_estimators=100 → 100 árboles en el ensamble. * Se entrena y se predice sobre los mismos datos de prueba. Evaluación: mse_rf = mean_squared_error(y_test, y_pred_rf) r2_rf = r2_score(y_test, y_pred_rf) #### 8️⃣ Gráfica comparativa de errores[[edit](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&veaction=edit§ion=33 "Edit section: 8️⃣ Gráfica comparativa de errores") | [edit source](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&action=edit§ion=33 "Edit section's source code: 8️⃣ Gráfica comparativa de errores")] errors = pd.DataFrame({ "MLPRegressor": np.abs(y_test - y_pred_mlp), "RandomForest": np.abs(y_test - y_pred_rf) }) sns.boxplot(data=errors) * Calculamos el error absoluto de cada modelo sobre el conjunto de prueba. * Usamos un boxplot para comparar la distribución de los errores de los dos modelos. * Permite ver visualmente cuál modelo tiene errores más pequeños o menos dispersos. ##### ✅ Resumen del flujo[[edit](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&veaction=edit§ion=34 "Edit section: ✅ Resumen del flujo") | [edit source](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&action=edit§ion=34 "Edit section's source code: ✅ Resumen del flujo")] 1. Cargar datos → entender qué vamos a predecir. 2. Separar features y target. 3. Dividir en entrenamiento y prueba. 4. Escalar datos (para MLP). 5. Entrenar MLPRegressor. 6. Entrenar otra técnica (RandomForest). 7. Evaluar ambos modelos con métricas. 8. Comparar errores con boxplot. Si quieres, puedo hacerte un diagrama sencillo del flujo de datos que muestre cómo van desde las características hasta la predicción y la comparación de errores. Esto ayuda mucho a visualizar el proceso. ¿Quieres que haga ese diagrama? ## References[[edit](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&veaction=edit§ion=35 "Edit section: References") | [edit source](https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&action=edit§ion=35 "Edit section's source code: References")] 1. [↑](https://freemwiki.com/index.php?oldid=593531&title=Openai%2F6907fa8a-e344-8008-8a25-8d456370c8d6#cite_ref-1 "Jump up")["Entrenamiento red regresión"](https://chatgpt.com/share/6907fa8a-e344-8008-8a25-8d456370c8d6). ChatGPT. Retrieved 2025-11-20.