En este artículo, demostraremos un flujo de trabajo completo de un proyecto de aprendizaje automático utilizando Scikit-Learn. Construiremos un modelo para predecir los precios de la vivienda en California en función de diversas características, como el ingreso medio, la antigüedad de la vivienda y el número promedio de habitaciones. Este proyecto lo guiará a través de cada paso del proceso, incluida la carga de datos, la exploración, la capacitación del modelo, la evaluación y la visualización de resultados. Ya sea un principiante que busca comprender los conceptos básicos o un profesional experimentado que busca un repaso, este artículo le brindará información valiosa sobre la aplicación práctica de las técnicas de aprendizaje automático.
El mercado inmobiliario de California es conocido por sus características únicas y dinámica de precios. En este proyecto, nuestro objetivo es desarrollar un modelo de aprendizaje automático para predecir los precios de la vivienda en función de varias características. Usaremos el conjunto de datos de vivienda de California, que incluye varios atributos, como ingreso medio, antigüedad de la vivienda, habitaciones promedio y más.
En esta sección, importaremos las bibliotecas necesarias para la manipulación y visualización de datos y la construcción de nuestro modelo de aprendizaje automático.
import pandas as pd import matplotlib.pyplot as plt from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_squared_error from sklearn.datasets import fetch_california_housing
Cargaremos el conjunto de datos de Vivienda de California y crearemos un DataFrame para organizar los datos. La variable objetivo, que es el precio de la vivienda, se agregará como una nueva columna.
# Load the California Housing dataset california = fetch_california_housing() df = pd.DataFrame(california.data, columns=california.feature_names) df['PRICE'] = california.target
Para que el análisis sea manejable, seleccionaremos aleatoriamente 700 muestras del conjunto de datos para nuestro estudio.
# Randomly Selecting 700 Samples df_sample = df.sample(n=700, random_state=42)
Esta sección proporcionará una descripción general del conjunto de datos, mostrando las primeras cinco filas para comprender las características y la estructura de nuestros datos.
# Overview of the data print("First five rows of the dataset:") print(df_sample.head())
First five rows of the dataset: MedInc HouseAge AveRooms AveBedrms Population AveOccup Latitude \ 20046 1.6812 25.0 4.192201 1.022284 1392.0 3.877437 36.06 3024 2.5313 30.0 5.039384 1.193493 1565.0 2.679795 35.14 15663 3.4801 52.0 3.977155 1.185877 1310.0 1.360332 37.80 20484 5.7376 17.0 6.163636 1.020202 1705.0 3.444444 34.28 9814 3.7250 34.0 5.492991 1.028037 1063.0 2.483645 36.62 Longitude PRICE 20046 -119.01 0.47700 3024 -119.46 0.45800 15663 -122.44 5.00001 20484 -118.72 2.18600 9814 -121.93 2.78000
print(df_sample.info())
Index: 700 entries, 20046 to 5350 Data columns (total 9 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 MedInc 700 non-null float64 1 HouseAge 700 non-null float64 2 AveRooms 700 non-null float64 3 AveBedrms 700 non-null float64 4 Population 700 non-null float64 5 AveOccup 700 non-null float64 6 Latitude 700 non-null float64 7 Longitude 700 non-null float64 8 PRICE 700 non-null float64 dtypes: float64(9) memory usage: 54.7 KB
print(df_sample.describe())
MedInc HouseAge AveRooms AveBedrms Population \ count 700.000000 700.000000 700.000000 700.000000 700.000000 mean 3.937653 28.855714 5.404192 1.079266 1387.422857 std 2.085831 12.353313 1.848898 0.236318 1027.873659 min 0.852700 2.000000 2.096692 0.500000 8.000000 25% 2.576350 18.000000 4.397751 1.005934 781.000000 50% 3.480000 30.000000 5.145295 1.047086 1159.500000 75% 4.794625 37.000000 6.098061 1.098656 1666.500000 max 15.000100 52.000000 36.075472 5.273585 8652.000000 AveOccup Latitude Longitude PRICE count 700.000000 700.000000 700.000000 700.000000 mean 2.939913 35.498243 -119.439729 2.082073 std 0.745525 2.123689 1.956998 1.157855 min 1.312994 32.590000 -124.150000 0.458000 25% 2.457560 33.930000 -121.497500 1.218500 50% 2.834524 34.190000 -118.420000 1.799000 75% 3.326869 37.592500 -118.007500 2.665500 max 7.200000 41.790000 -114.590000 5.000010
Separaremos el conjunto de datos en características (X) y la variable objetivo (y) y luego lo dividiremos en conjuntos de entrenamiento y prueba para el entrenamiento y evaluación del modelo.
# Splitting the dataset into Train and Test sets X = df_sample.drop('PRICE', axis=1) # Features y = df_sample['PRICE'] # Target variable # Split the dataset into training and testing sets X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
En esta sección, crearemos y entrenaremos un modelo de regresión lineal utilizando los datos de entrenamiento para conocer la relación entre las características y los precios de la vivienda.
# Creating and training the Linear Regression model lr = LinearRegression() lr.fit(X_train, y_train)
Haremos predicciones en el conjunto de prueba y calcularemos el error cuadrático medio (MSE) y los valores de R cuadrado para evaluar el rendimiento del modelo.
# Making predictions on the test set y_pred = lr.predict(X_test) # Calculating Mean Squared Error mse = mean_squared_error(y_test, y_pred) print(f"\nLinear Regression Mean Squared Error: {mse}")
Linear Regression Mean Squared Error: 0.3699851092128846
Aquí, crearemos un DataFrame para comparar los precios reales de la vivienda con los precios previstos generados por nuestro modelo.
# Displaying Actual vs Predicted Values results = pd.DataFrame({'Actual Prices': y_test.values, 'Predicted Prices': y_pred}) print("\nActual vs Predicted:") print(results)
Actual vs Predicted: Actual Prices Predicted Prices 0 0.87500 0.887202 1 1.19400 2.445412 2 5.00001 6.249122 3 2.78700 2.743305 4 1.99300 2.794774 .. ... ... 135 1.62100 2.246041 136 3.52500 2.626354 137 1.91700 1.899090 138 2.27900 2.731436 139 1.73400 2.017134 [140 rows x 2 columns]
En la sección final, visualizaremos la relación entre los precios reales y previstos de la vivienda utilizando un diagrama de dispersión para evaluar visualmente el rendimiento del modelo.
# Visualizing the Results plt.figure(figsize=(8, 6)) plt.scatter(y_test, y_pred, color='blue') plt.xlabel('Actual Prices') plt.ylabel('Predicted Prices') plt.title('Actual vs Predicted House Prices') # Draw the ideal line plt.plot([0, 6], [0, 6], color='red', linestyle='--') # Set limits to minimize empty space plt.xlim(y_test.min() - 1, y_test.max() 1) plt.ylim(y_test.min() - 1, y_test.max() 1) plt.grid() plt.show()
En este proyecto, desarrollamos un modelo de regresión lineal para predecir los precios de la vivienda en California en función de varias características. Se calculó el error cuadrático medio para evaluar el rendimiento del modelo, lo que proporcionó una medida cuantitativa de la precisión de la predicción. A través de la visualización, pudimos ver qué tan bien se desempeñó nuestro modelo en comparación con los valores reales.
Este proyecto demuestra el poder del aprendizaje automático en el análisis inmobiliario y puede servir como base para técnicas de modelado predictivo más avanzadas.
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