<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://freemwiki.com/index.php?action=history&amp;feed=atom&amp;title=Openai%2F6907fa8a-e344-8008-8a25-8d456370c8d6</id>
	<title>Openai/6907fa8a-e344-8008-8a25-8d456370c8d6 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://freemwiki.com/index.php?action=history&amp;feed=atom&amp;title=Openai%2F6907fa8a-e344-8008-8a25-8d456370c8d6"/>
	<link rel="alternate" type="text/html" href="https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&amp;action=history"/>
	<updated>2026-04-09T08:56:47Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.3</generator>
	<entry>
		<id>https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&amp;diff=593531&amp;oldid=prev</id>
		<title>Lukegao: by freem.ai...</title>
		<link rel="alternate" type="text/html" href="https://freemwiki.com/index.php?title=Openai/6907fa8a-e344-8008-8a25-8d456370c8d6&amp;diff=593531&amp;oldid=prev"/>
		<updated>2025-11-21T06:09:15Z</updated>

		<summary type="html">&lt;p&gt;by freem.ai...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
{{DISPLAYTITLE:Entrenamiento red regresión}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;This conversation was exported from ChatGPT&amp;#039;&amp;#039;&amp;lt;ref&amp;gt;{{cite web|title=Entrenamiento red regresión|url=https://chatgpt.com/share/6907fa8a-e344-8008-8a25-8d456370c8d6|publisher=ChatGPT|access-date=2025-11-20}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== gpt-5-mini ==&lt;br /&gt;
=== User: hola, estamos trabajando en redes neuronales multicapa, tenemos que entrenar una red multicapa para que realice una tar… ===&lt;br /&gt;
hola, estamos trabajando en redes neuronales multicapa, tenemos que entrenar una red multicapa para que realice una tarea de regresión&lt;br /&gt;
&lt;br /&gt;
=== Assistant: ¡Perfecto! ===&lt;br /&gt;
¡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.&lt;br /&gt;
&lt;br /&gt;
===== - Clasificación: salida discreta (ej. 0 o 1, rojo o azul). Para esto MLPClassifier de scikit-learn. =====&lt;br /&gt;
* Regresión: salida continua (ej. predicción de precio, temperatura, etc.). Para esto usamos MLPRegressor de scikit-learn.&lt;br /&gt;
&lt;br /&gt;
===== Si queremos redes neuronales para regresión: =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;from sklearn.neural_network import MLPRegressor&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otras técnicas de regresión en scikit-learn (no redes) son:&lt;br /&gt;
* LinearRegression → regresión lineal simple o múltiple.&lt;br /&gt;
* Ridge → regresión lineal con regularización L2.&lt;br /&gt;
* Lasso → regresión lineal con regularización L1.&lt;br /&gt;
* DecisionTreeRegressor → árbol de decisión para regresión.&lt;br /&gt;
* RandomForestRegressor → ensamble de árboles de decisión.&lt;br /&gt;
* KNeighborsRegressor → k vecinos más cercanos.&lt;br /&gt;
* SVR → máquina de soporte vectorial para regresión.&lt;br /&gt;
&lt;br /&gt;
===== Supongamos que tenemos datos X (features) y y (target continuo): =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;from sklearn.model_selection import train_test_split&lt;br /&gt;
from sklearn.preprocessing import StandardScaler&lt;br /&gt;
&lt;br /&gt;
=== Dividir datos ===&lt;br /&gt;
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)&lt;br /&gt;
&lt;br /&gt;
=== Escalar características (muy importante en MLP) ===&lt;br /&gt;
scaler = StandardScaler()&lt;br /&gt;
X_train = scaler.fit_transform(X_train)&lt;br /&gt;
X_test = scaler.transform(X_test)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== &amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;from sklearn.neural_network import MLPRegressor =====&lt;br /&gt;
&lt;br /&gt;
=== Crear el modelo ===&lt;br /&gt;
mlp = MLPRegressor(hidden_layer_sizes=(50, 30),  # dos capas ocultas con 50 y 30 neuronas&lt;br /&gt;
                   activation=&amp;#039;relu&amp;#039;,           # función de activación&lt;br /&gt;
                   solver=&amp;#039;adam&amp;#039;,              # optimizador&lt;br /&gt;
                   max_iter=1000,              # iteraciones&lt;br /&gt;
                   random_state=42)&lt;br /&gt;
&lt;br /&gt;
=== Entrenar ===&lt;br /&gt;
mlp.fit(X_train, y_train)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== &amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;from sklearn.metrics import mean_squared_error, r2_score =====&lt;br /&gt;
&lt;br /&gt;
y_pred = mlp.predict(X_test)&lt;br /&gt;
&lt;br /&gt;
mse = mean_squared_error(y_test, y_pred)&lt;br /&gt;
r2 = r2_score(y_test, y_pred)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;MSE:&amp;quot;, mse)&lt;br /&gt;
print(&amp;quot;R^2:&amp;quot;, r2)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* MSE (Mean Squared Error): mientras más bajo, mejor.&lt;br /&gt;
* R²: cercano a 1 → buen ajuste.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
¿Quieres que haga eso?&lt;br /&gt;
&lt;br /&gt;
=== User: Para la clase  MLPClassifier de scikit-learn sklearn la cual provee una red neuronal multicapa para realizar clasificac… ===&lt;br /&gt;
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?&lt;br /&gt;
&lt;br /&gt;
=== Assistant: ¡Perfecto! ===&lt;br /&gt;
¡Perfecto! Vamos a responder con precisión.&lt;br /&gt;
&lt;br /&gt;
En scikit-learn, la clase que sirve para redes neuronales multicapa en tareas de regresión es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;from sklearn.neural_network import MLPRegressor&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== - MLPClassifier → para clasificación (salida discreta, etiquetas). =====&lt;br /&gt;
* MLPRegressor → para regresión (salida continua, valores numéricos).&lt;br /&gt;
&lt;br /&gt;
Ambas clases son parte del módulo sklearn.neural_network y permiten:&lt;br /&gt;
* Definir capas ocultas (hidden_layer_sizes)&lt;br /&gt;
* Elegir función de activación (relu, tanh, etc.)&lt;br /&gt;
* Seleccionar el optimizador (adam, sgd, etc.)&lt;br /&gt;
&lt;br /&gt;
Entonces, la respuesta exacta es &amp;lt;code&amp;gt;MLPRegressor&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Si quieres, puedo mostrar un ejemplo de cómo usar &amp;lt;code&amp;gt;MLPRegressor&amp;lt;/code&amp;gt; paso a paso para una tarea de regresión. ¿Quieres que lo haga?&lt;br /&gt;
&lt;br /&gt;
=== User: ¿Qué clases de esa librería proveen otras técnicas de machine learning para problemas de regresión? ===&lt;br /&gt;
¿Qué clases de esa librería proveen otras técnicas de machine learning para problemas de regresión?&lt;br /&gt;
&lt;br /&gt;
=== Assistant: ¡Claro! ===&lt;br /&gt;
¡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:&lt;br /&gt;
&lt;br /&gt;
===== - LinearRegression → regresión lineal básica. =====&lt;br /&gt;
* Ridge → regresión lineal con regularización L2.&lt;br /&gt;
* Lasso → regresión lineal con regularización L1.&lt;br /&gt;
* ElasticNet → combina L1 y L2.&lt;br /&gt;
* SGDRegressor → regresión lineal entrenada por descenso de gradiente estocástico.&lt;br /&gt;
&lt;br /&gt;
===== - DecisionTreeRegressor → árbol de decisión para regresión. =====&lt;br /&gt;
* RandomForestRegressor → bosque aleatorio (ensamble de árboles).&lt;br /&gt;
* GradientBoostingRegressor → boosting de árboles (GBM).&lt;br /&gt;
* HistGradientBoostingRegressor → versión más rápida de boosting de árboles.&lt;br /&gt;
* ExtraTreesRegressor → ensamble de árboles con más aleatoriedad.&lt;br /&gt;
&lt;br /&gt;
===== - KNeighborsRegressor → predicción basada en los k vecinos más cercanos. =====&lt;br /&gt;
&lt;br /&gt;
===== - SVR → Support Vector Regression (versión de SVM para regresión). =====&lt;br /&gt;
&lt;br /&gt;
===== - GaussianProcessRegressor → regresión usando procesos gaussianos. =====&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
¿Quieres que haga esa tabla?&lt;br /&gt;
&lt;br /&gt;
=== User: Escogimos un conjunto de datos del repositorio UCI: Wine Quality, ¿En qué consiste el problema de regresión de ese conj… ===&lt;br /&gt;
Escogimos un conjunto de datos del repositorio UCI: Wine Quality, ¿En qué consiste el problema de regresión de ese conjunto?&lt;br /&gt;
&lt;br /&gt;
=== Assistant: ¡Perfecto! ===&lt;br /&gt;
¡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:&lt;br /&gt;
&lt;br /&gt;
===== - Contiene datos de vinos tintos y/o blancos. =====&lt;br /&gt;
* Cada registro (fila) representa un vino diferente.&lt;br /&gt;
* 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&lt;br /&gt;
* La variable objetivo (target) es: - quality → puntuación de calidad del vino, en un rango generalmente de 0 a 10.&lt;br /&gt;
&lt;br /&gt;
===== 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. =====&lt;br /&gt;
* Entrada (X): características fisicoquímicas (acidez, alcohol, azúcar, etc.)&lt;br /&gt;
* Salida (y): calidad del vino (número, normalmente entero, pero para regresión se trata como continuo)&lt;br /&gt;
&lt;br /&gt;
Ejemplo:&lt;br /&gt;
Si tenemos un vino con ciertas características, queremos que la red neuronal prediga su calidad estimada (por ejemplo, 6.8).&lt;br /&gt;
&lt;br /&gt;
===== - La variable objetivo es numérica, no categórica. =====&lt;br /&gt;
* Permite medir error absoluto, MSE, R², etc.&lt;br /&gt;
* Se pueden probar diferentes modelos de regresión, incluidas redes neuronales multicapa.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
¿Quieres que haga eso?&lt;br /&gt;
&lt;br /&gt;
=== User: Genera una libreta en Python ya sea de Jupyter o Google Colab que haga lo siguiente: ===&lt;br /&gt;
Genera una libreta en Python (ya sea de Jupyter o Google Colab) que haga lo siguiente:&lt;br /&gt;
Leer el conjunto de datos que escogiste utilizando la librería Pandas.&lt;br /&gt;
Dividir el conjunto de datos en conjunto de entrenamiento y conjunto de prueba.&lt;br /&gt;
Realizar normalización y estandarización, en caso de ser necesario.&lt;br /&gt;
Entrenar un modelo de aprendizaje con una red neuronal multicapa (usa sklearn).&lt;br /&gt;
Evaluar el modelo de aprendizaje generado (utiliza el conjunto de prueba y alguna de las métricas que enumeraste en el ejercicio anterior).&lt;br /&gt;
Entrenar y evaluar otro modelo con alguna otra técnica de aprendizaje máquina.&lt;br /&gt;
Mostrar una gráfica de caja-bigote que compare los resultados obtenidos por la red neuronal y esta otra técnica.&lt;br /&gt;
&lt;br /&gt;
=== Assistant: ¡Genial! ===&lt;br /&gt;
¡Genial! Te voy a generar un notebook completo en Python que puedes abrir en Jupyter o Google Colab. Este notebook:&lt;br /&gt;
* Carga el dataset Wine Quality desde UCI.&lt;br /&gt;
* Divide los datos en entrenamiento y prueba.&lt;br /&gt;
* Normaliza las características.&lt;br /&gt;
* Entrena un MLPRegressor (red neuronal multicapa).&lt;br /&gt;
* Entrena un RandomForestRegressor como segunda técnica de ML.&lt;br /&gt;
* Evalúa ambos modelos con MSE y R².&lt;br /&gt;
* Muestra una gráfica de caja-bigote comparando los errores.&lt;br /&gt;
&lt;br /&gt;
Aquí tienes el código listo para notebook:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;# Wine_Quality_Regresion.ipynb&lt;br /&gt;
&lt;br /&gt;
=== ========================== ===&lt;br /&gt;
=== 1️⃣ Librerías ===&lt;br /&gt;
=== ========================== ===&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import numpy as np&lt;br /&gt;
from sklearn.model_selection import train_test_split&lt;br /&gt;
from sklearn.preprocessing import StandardScaler&lt;br /&gt;
from sklearn.neural_network import MLPRegressor&lt;br /&gt;
from sklearn.ensemble import RandomForestRegressor&lt;br /&gt;
from sklearn.metrics import mean_squared_error, r2_score&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
import seaborn as sns&lt;br /&gt;
&lt;br /&gt;
=== ========================== ===&lt;br /&gt;
=== 2️⃣ Cargar dataset ===&lt;br /&gt;
=== ========================== ===&lt;br /&gt;
=== URL del dataset Wine Quality (vino tinto) ===&lt;br /&gt;
url = &amp;quot;https://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-red.csv&amp;quot;&lt;br /&gt;
df = pd.read_csv(url, sep=&amp;#039;;&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
=== Verificar datos ===&lt;br /&gt;
print(&amp;quot;Primeras filas del dataset:&amp;quot;)&lt;br /&gt;
print(df.head())&lt;br /&gt;
print(&amp;quot;\nInformación del dataset:&amp;quot;)&lt;br /&gt;
print(df.info())&lt;br /&gt;
print(&amp;quot;\nEstadísticas descriptivas:&amp;quot;)&lt;br /&gt;
print(df.describe())&lt;br /&gt;
&lt;br /&gt;
=== ========================== ===&lt;br /&gt;
=== 3️⃣ Separar features y target ===&lt;br /&gt;
=== ========================== ===&lt;br /&gt;
X = df.drop(&amp;quot;quality&amp;quot;, axis=1)&lt;br /&gt;
y = df[&amp;quot;quality&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
=== ========================== ===&lt;br /&gt;
=== 4️⃣ Dividir en entrenamiento y prueba ===&lt;br /&gt;
=== ========================== ===&lt;br /&gt;
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)&lt;br /&gt;
&lt;br /&gt;
=== ========================== ===&lt;br /&gt;
=== 5️⃣ Normalización / estandarización ===&lt;br /&gt;
=== ========================== ===&lt;br /&gt;
scaler = StandardScaler()&lt;br /&gt;
X_train_scaled = scaler.fit_transform(X_train)&lt;br /&gt;
X_test_scaled = scaler.transform(X_test)&lt;br /&gt;
&lt;br /&gt;
=== ========================== ===&lt;br /&gt;
=== 6️⃣ Entrenar MLPRegressor ===&lt;br /&gt;
=== ========================== ===&lt;br /&gt;
mlp = MLPRegressor(hidden_layer_sizes=(50, 30),&lt;br /&gt;
                   activation=&amp;#039;relu&amp;#039;,&lt;br /&gt;
                   solver=&amp;#039;adam&amp;#039;,&lt;br /&gt;
                   max_iter=1000,&lt;br /&gt;
                   random_state=42)&lt;br /&gt;
mlp.fit(X_train_scaled, y_train)&lt;br /&gt;
&lt;br /&gt;
=== Predicciones ===&lt;br /&gt;
y_pred_mlp = mlp.predict(X_test_scaled)&lt;br /&gt;
&lt;br /&gt;
=== Evaluación ===&lt;br /&gt;
mse_mlp = mean_squared_error(y_test, y_pred_mlp)&lt;br /&gt;
r2_mlp = r2_score(y_test, y_pred_mlp)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;\n--- MLPRegressor ---&amp;quot;)&lt;br /&gt;
print(f&amp;quot;MSE: {mse_mlp:.4f}&amp;quot;)&lt;br /&gt;
print(f&amp;quot;R²: {r2_mlp:.4f}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
=== ========================== ===&lt;br /&gt;
=== 7️⃣ Entrenar RandomForestRegressor ===&lt;br /&gt;
=== ========================== ===&lt;br /&gt;
rf = RandomForestRegressor(n_estimators=100, random_state=42)&lt;br /&gt;
rf.fit(X_train, y_train)&lt;br /&gt;
&lt;br /&gt;
=== Predicciones ===&lt;br /&gt;
y_pred_rf = rf.predict(X_test)&lt;br /&gt;
&lt;br /&gt;
=== Evaluación ===&lt;br /&gt;
mse_rf = mean_squared_error(y_test, y_pred_rf)&lt;br /&gt;
r2_rf = r2_score(y_test, y_pred_rf)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;\n--- RandomForestRegressor ---&amp;quot;)&lt;br /&gt;
print(f&amp;quot;MSE: {mse_rf:.4f}&amp;quot;)&lt;br /&gt;
print(f&amp;quot;R²: {r2_rf:.4f}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
=== ========================== ===&lt;br /&gt;
=== 8️⃣ Gráfica comparativa de errores ===&lt;br /&gt;
=== ========================== ===&lt;br /&gt;
errors = pd.DataFrame({&lt;br /&gt;
    &amp;quot;MLPRegressor&amp;quot;: np.abs(y_test - y_pred_mlp),&lt;br /&gt;
    &amp;quot;RandomForest&amp;quot;: np.abs(y_test - y_pred_rf)&lt;br /&gt;
})&lt;br /&gt;
&lt;br /&gt;
plt.figure(figsize=(8,6))&lt;br /&gt;
sns.boxplot(data=errors)&lt;br /&gt;
plt.title(&amp;quot;Comparación de errores absolutos entre modelos&amp;quot;)&lt;br /&gt;
plt.ylabel(&amp;quot;Error absoluto&amp;quot;)&lt;br /&gt;
plt.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
✅ Detalles importantes:&lt;br /&gt;
* La columna quality es la variable continua que queremos predecir.&lt;br /&gt;
* Para la red neuronal usamos MLPRegressor con 2 capas ocultas (50 y 30 neuronas).&lt;br /&gt;
* Como segunda técnica elegí RandomForestRegressor porque funciona bien para regresión y es fácil de interpretar.&lt;br /&gt;
* La gráfica boxplot compara el error absoluto de cada modelo sobre el conjunto de prueba.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
¿Quieres que haga eso?&lt;br /&gt;
&lt;br /&gt;
=== User: Me lo puedes explicar, porfavor ===&lt;br /&gt;
Me lo puedes explicar, porfavor&lt;br /&gt;
&lt;br /&gt;
=== Assistant: ¡Claro! ===&lt;br /&gt;
¡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:&lt;br /&gt;
&lt;br /&gt;
==== 1️⃣ Librerías ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;import pandas as pd&lt;br /&gt;
import numpy as np&lt;br /&gt;
from sklearn.model_selection import train_test_split&lt;br /&gt;
from sklearn.preprocessing import StandardScaler&lt;br /&gt;
from sklearn.neural_network import MLPRegressor&lt;br /&gt;
from sklearn.ensemble import RandomForestRegressor&lt;br /&gt;
from sklearn.metrics import mean_squared_error, r2_score&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
import seaborn as sns&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* pandas → para manejar los datos como tablas (DataFrames).&lt;br /&gt;
* numpy → operaciones numéricas.&lt;br /&gt;
* train_test_split → divide los datos en entrenamiento y prueba.&lt;br /&gt;
* StandardScaler → estandariza los datos (media=0, desviación estándar=1), importante para redes neuronales.&lt;br /&gt;
* MLPRegressor → red neuronal multicapa para regresión.&lt;br /&gt;
* RandomForestRegressor → otro modelo de regresión basado en árboles.&lt;br /&gt;
* mean_squared_error, r2_score → métricas para evaluar el rendimiento.&lt;br /&gt;
* matplotlib y seaborn → gráficos.&lt;br /&gt;
&lt;br /&gt;
==== 2️⃣ Cargar dataset ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;url = &amp;quot;https://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-red.csv&amp;quot;&lt;br /&gt;
df = pd.read_csv(url, sep=&amp;#039;;&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Descargamos los datos desde el repositorio UCI.&lt;br /&gt;
* sep=&amp;#039;;&amp;#039; porque el CSV usa punto y coma como separador.&lt;br /&gt;
* Luego imprimimos df.head() y df.describe() para ver cómo son los datos.&lt;br /&gt;
&lt;br /&gt;
Qué contiene:&lt;br /&gt;
* Columnas con propiedades químicas del vino (alcohol, pH, sulphates, etc.).&lt;br /&gt;
* Columna quality → la puntuación del vino, nuestra variable objetivo.&lt;br /&gt;
&lt;br /&gt;
==== 3️⃣ Separar features y target ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;X = df.drop(&amp;quot;quality&amp;quot;, axis=1)&lt;br /&gt;
y = df[&amp;quot;quality&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* X → todas las columnas que usaremos para predecir (features).&lt;br /&gt;
* y → la columna que queremos predecir (target).&lt;br /&gt;
&lt;br /&gt;
==== 4️⃣ Dividir en entrenamiento y prueba ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 80% de los datos para entrenamiento, 20% para prueba.&lt;br /&gt;
* random_state=42 → asegura reproducibilidad.&lt;br /&gt;
&lt;br /&gt;
==== 5️⃣ Normalización / Estandarización ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;scaler = StandardScaler()&lt;br /&gt;
X_train_scaled = scaler.fit_transform(X_train)&lt;br /&gt;
X_test_scaled = scaler.transform(X_test)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Escalamos los datos para que todas las variables estén en la misma escala.&lt;br /&gt;
* Muy importante para redes neuronales porque facilita el aprendizaje y evita que variables con valores grandes dominen.&lt;br /&gt;
&lt;br /&gt;
==== 6️⃣ Entrenar MLPRegressor ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;mlp = MLPRegressor(hidden_layer_sizes=(50, 30),&lt;br /&gt;
                   activation=&amp;#039;relu&amp;#039;,&lt;br /&gt;
                   solver=&amp;#039;adam&amp;#039;,&lt;br /&gt;
                   max_iter=1000,&lt;br /&gt;
                   random_state=42)&lt;br /&gt;
mlp.fit(X_train_scaled, y_train)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Creamos la red neuronal multicapa: - 2 capas ocultas con 50 y 30 neuronas. - Función de activación relu. - Optimización con adam.&lt;br /&gt;
* max_iter=1000 → máximo de iteraciones para entrenar.&lt;br /&gt;
* fit() → entrenamos el modelo con los datos escalados.&lt;br /&gt;
&lt;br /&gt;
Predicción y evaluación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;y_pred_mlp = mlp.predict(X_test_scaled)&lt;br /&gt;
mse_mlp = mean_squared_error(y_test, y_pred_mlp)&lt;br /&gt;
r2_mlp = r2_score(y_test, y_pred_mlp)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* MSE → error cuadrático medio (mientras más bajo, mejor).&lt;br /&gt;
* R² → qué tanto el modelo explica la variabilidad del target (1 = perfecto).&lt;br /&gt;
&lt;br /&gt;
==== 7️⃣ Entrenar RandomForestRegressor ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;rf = RandomForestRegressor(n_estimators=100, random_state=42)&lt;br /&gt;
rf.fit(X_train, y_train)&lt;br /&gt;
y_pred_rf = rf.predict(X_test)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* RandomForest → conjunto de árboles de decisión.&lt;br /&gt;
* n_estimators=100 → 100 árboles en el ensamble.&lt;br /&gt;
* Se entrena y se predice sobre los mismos datos de prueba.&lt;br /&gt;
&lt;br /&gt;
Evaluación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;mse_rf = mean_squared_error(y_test, y_pred_rf)&lt;br /&gt;
r2_rf = r2_score(y_test, y_pred_rf)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 8️⃣ Gráfica comparativa de errores ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;errors = pd.DataFrame({&lt;br /&gt;
    &amp;quot;MLPRegressor&amp;quot;: np.abs(y_test - y_pred_mlp),&lt;br /&gt;
    &amp;quot;RandomForest&amp;quot;: np.abs(y_test - y_pred_rf)&lt;br /&gt;
})&lt;br /&gt;
&lt;br /&gt;
sns.boxplot(data=errors)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Calculamos el error absoluto de cada modelo sobre el conjunto de prueba.&lt;br /&gt;
* Usamos un boxplot para comparar la distribución de los errores de los dos modelos.&lt;br /&gt;
* Permite ver visualmente cuál modelo tiene errores más pequeños o menos dispersos.&lt;br /&gt;
&lt;br /&gt;
===== ✅ Resumen del flujo =====&lt;br /&gt;
# Cargar datos → entender qué vamos a predecir.&lt;br /&gt;
# Separar features y target.&lt;br /&gt;
# Dividir en entrenamiento y prueba.&lt;br /&gt;
# Escalar datos (para MLP).&lt;br /&gt;
# Entrenar MLPRegressor.&lt;br /&gt;
# Entrenar otra técnica (RandomForest).&lt;br /&gt;
# Evaluar ambos modelos con métricas.&lt;br /&gt;
# Comparar errores con boxplot.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
¿Quieres que haga ese diagrama?&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:ChatGPT Shares]]&lt;br /&gt;
[[Category:openai]]&lt;/div&gt;</summary>
		<author><name>Lukegao</name></author>
	</entry>
</feed>