El aprendizaje automático está transformando varias industrias, incluida la inmobiliaria. Una tarea común es predecir los precios de la vivienda en función de diversas características, como la cantidad de dormitorios, baños, pies cuadrados y ubicación. En este artículo, exploraremos cómo crear un modelo de aprendizaje automático utilizando scikit-learn para predecir los precios de la vivienda, cubriendo todos los aspectos, desde el preprocesamiento de datos hasta la implementación del modelo.
Scikit-learn es una de las bibliotecas más utilizadas para el aprendizaje automático en Python. Ofrece herramientas simples y eficientes para el análisis y modelado de datos. Ya sea que se trate de clasificación, regresión, agrupamiento o reducción de dimensionalidad, scikit-learn proporciona un amplio conjunto de utilidades para ayudarlo a crear modelos sólidos de aprendizaje automático.
En esta guía, construiremos un modelo de regresión utilizando scikit-learn para predecir los precios de la vivienda. Repasemos cada paso del proceso.
La tarea que nos ocupa es predecir el precio de una casa en función de sus características como:
Este es un problema de aprendizaje supervisado en el que la variable objetivo (precio de la vivienda) es continua, lo que la convierte en una tarea de regresión. Scikit-learn proporciona una variedad de algoritmos para la regresión, como Regresión lineal y Bosque aleatorio, que usaremos en este proyecto.
Puedes utilizar un conjunto de datos del mundo real como el conjunto de datos de Kaggle House Prices o recopilar tus propios datos de una API pública.
Aquí tienes una muestra de cómo podrían verse tus datos:
Dormitorios | Baños | Área (pies cuadrados) | Ubicación | Precio ($) |
---|---|---|---|---|
3 | 2 | 1500 | Bostón | 300.000 |
4 | 3 | 2000 | Seattle | 500.000 |
La variable objetivo aquí es el Precio.
Antes de introducir los datos en un modelo de aprendizaje automático, debemos preprocesarlos. Esto incluye manejar valores faltantes, codificar características categóricas y escalar los datos.
La falta de datos es común en conjuntos de datos del mundo real. Podemos completar los valores faltantes con una medida estadística como la mediana o eliminar filas con datos faltantes:
data.fillna(data.median(), inplace=True)
Dado que los modelos de aprendizaje automático requieren entrada numérica, necesitamos convertir características categóricas como Ubicación en números. Codificación de etiquetas asigna un número único a cada categoría:
from sklearn.preprocessing import LabelEncoder encoder = LabelEncoder() data['Location'] = encoder.fit_transform(data['Location'])
Es importante escalar funciones como Área y Precio para garantizar que estén en la misma escala, especialmente para algoritmos sensibles a la magnitud de las funciones. Así es como aplicamos el escalado:
from sklearn.preprocessing import StandardScaler scaler = StandardScaler() X_scaled = scaler.fit_transform(X)
No todas las funciones contribuyen por igual a la variable objetivo. La selección de funciones ayuda a identificar las funciones más importantes, lo que mejora el rendimiento del modelo y reduce el sobreajuste.
En este proyecto, utilizamos SelectKBest para seleccionar las 5 características principales según su correlación con la variable objetivo:
from sklearn.feature_selection import SelectKBest, f_regression selector = SelectKBest(score_func=f_regression, k=5) X_new = selector.fit_transform(X, y)
Ahora que hemos preprocesado los datos y seleccionado las mejores funciones, es hora de entrenar el modelo. Usaremos dos algoritmos de regresión: Regresión lineal y Bosque aleatorio.
La regresión lineal ajusta una línea recta a través de los datos, minimizando la diferencia entre los valores previstos y reales:
from sklearn.linear_model import LinearRegression linear_model = LinearRegression() linear_model.fit(X_train, y_train)
Random Forest es un método conjunto que utiliza múltiples árboles de decisión y promedia sus resultados para mejorar la precisión y reducir el sobreajuste:
from sklearn.ensemble import RandomForestRegressor forest_model = RandomForestRegressor(n_estimators=100) forest_model.fit(X_train, y_train)
Para evaluar qué tan bien se generalizan nuestros modelos, dividimos los datos en conjuntos de entrenamiento y prueba:
from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X_new, y, test_size=0.2, random_state=42)
Después de entrenar los modelos, debemos evaluar su rendimiento utilizando métricas como Error cuadrático medio (MSE) y R cuadrado (R²).
MSE calcula la diferencia al cuadrado promedio entre los valores previstos y reales. Un MSE más bajo indica un mejor rendimiento:
from sklearn.metrics import mean_squared_error mse = mean_squared_error(y_test, y_pred)
R² nos dice qué tan bien el modelo explica la varianza en la variable objetivo. Un valor de 1 significa predicción perfecta:
from sklearn.metrics import r2_score r2 = r2_score(y_test, y_pred)
Compare el rendimiento de los modelos de regresión lineal y bosque aleatorio utilizando estas métricas.
Para mejorar aún más el rendimiento del modelo, podemos ajustar los hiperparámetros. Para Random Forest, los hiperparámetros como n_estimators (número de árboles) y max_ Depth (profundidad máxima de los árboles) pueden afectar significativamente el rendimiento.
A continuación se explica cómo utilizar GridSearchCV para la optimización de hiperparámetros:
from sklearn.model_selection import GridSearchCV param_grid = { 'n_estimators': [50, 100, 200], 'max_depth': [None, 10, 20] } grid_search = GridSearchCV(RandomForestRegressor(), param_grid, cv=5) grid_search.fit(X_train, y_train) best_model = grid_search.best_estimator_
Una vez que haya entrenado y ajustado el modelo, el siguiente paso es la implementación. Puede utilizar Flask para crear una aplicación web sencilla que proporcione predicciones.
Aquí hay una aplicación Flask básica para ofrecer predicciones de precios de viviendas:
from flask import Flask, request, jsonify import joblib app = Flask(__name__) # Load the trained model model = joblib.load('best_model.pkl') @app.route('/predict', methods=['POST']) def predict(): data = request.json prediction = model.predict([data['features']]) return jsonify({'predicted_price': prediction[0]}) if __name__ == '__main__': app.run()
Guarde el modelo entrenado usando joblib:
import joblib joblib.dump(best_model, 'best_model.pkl')
De esta manera, puedes hacer predicciones enviando solicitudes a la API.
En este proyecto, exploramos todo el proceso de construcción de un modelo de aprendizaje automático utilizando scikit-learn para predecir los precios de la vivienda. Desde el preprocesamiento de datos y la selección de funciones hasta el entrenamiento, la evaluación y la implementación del modelo, cada paso se cubrió con ejemplos de código prácticos.
Ya sea que sea nuevo en el aprendizaje automático o esté buscando aplicar scikit-learn en proyectos del mundo real, esta guía proporciona un flujo de trabajo integral que puede adaptar para diversas tareas de regresión.
Siéntete libre de experimentar con diferentes modelos, conjuntos de datos y técnicas para mejorar el rendimiento y la precisión de tu modelo.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3