sebsmedina's picture
Primera carga modelo skl
468e979
Raw History Blame Contribute Delete
1.83 kB
"""Entrena una regresi贸n lineal con scikit-learn y la exporta a model.joblib.
Es el mismo problema de la Clase 10: predecir el precio de una casa (en miles de US$)
a partir de sus m虏, si tiene balc贸n y si tiene ascensor.
Uso:
python train.py
"""
from pathlib import Path
import joblib
import numpy as np
import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_absolute_error, r2_score
from sklearn.model_selection import train_test_split
CARPETA = Path(__file__).parent
ENTRADAS = ["m2", "balcon", "ascensor"]
def generar_casas(n=200, semilla=42):
"""Dataset sint茅tico de la Clase 10 (misma semilla, mismos datos)."""
rng = np.random.default_rng(semilla)
m2 = rng.integers(35, 121, n)
balcon = rng.integers(0, 2, n)
ascensor = rng.integers(0, 2, n)
precio = 1.5 * m2 + 8 * balcon + 12 * ascensor + 20 + rng.normal(0, 4, n)
return pd.DataFrame({"m2": m2, "balcon": balcon, "ascensor": ascensor, "precio": precio.round(1)})
# 1. Datos
casas = generar_casas()
X = casas[ENTRADAS]
y = casas["precio"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 2. Algoritmo + datos de entrenamiento -> modelo (los pesos y el bias)
modelo = LinearRegression()
modelo.fit(X_train, y_train)
# 3. Evaluaci贸n con datos que el modelo no vio
predicciones = modelo.predict(X_test)
print(f"MAE en test: {mean_absolute_error(y_test, predicciones):.2f} miles de US$")
print(f"R虏 en test: {r2_score(y_test, predicciones):.3f}")
print("Pesos (coef_):", dict(zip(ENTRADAS, modelo.coef_.round(3).tolist())))
print(f"Bias (intercept_): {modelo.intercept_:.3f}")
# 4. Exportaci贸n: se guarda el modelo entrenado, no el algoritmo
joblib.dump(modelo, CARPETA / "model.joblib")
print("Modelo guardado en model.joblib")