Regresión lineal en el conjunto de datos de viviendas de Boston

Créditos:http://www.wbur.org/radioboston/2013/09/18/bostons-housing-challenge

En mi blog anterior, cubrí los conceptos básicos de regresión lineal y descenso de gradiente. Para obtener una regresión lineal práctica, tomaremos un conjunto de datos original y aplicaremos los conceptos que hemos aprendido.

Tomaremos el conjunto de datos de viviendas que contiene información sobre diferentes casas en Boston. Estos datos originalmente formaban parte del Repositorio de Aprendizaje Automático de UCI y ahora se han eliminado. También podemos acceder a estos datos desde la biblioteca scikit-learn. Hay 506 muestras y 13 variables de entidades en este conjunto de datos. El objetivo es predecir el valor de los precios de la casa utilizando las características dadas.

Así que empecemos.

Primero, importaremos las bibliotecas requeridas.

a continuación, vamos a cargar los datos de la vivienda desde el scikit-learn biblioteca y entenderlo.

Le imprime el valor de la etiqueta boston_dataset para entender lo que contiene. print(boston_dataset.keys()) proporciona

dict_keys()
  • datos: contiene la información de varias casas
  • target: precios de la casa
  • feature_names: nombres de las características
  • DESCR: describe el conjunto de datos

Para saber más sobre las características use boston_dataset.DESCR La descripción de todas las características se da a continuación:

CRIM: Per capita crime rate by town
ZN: Proportion of residential land zoned for lots over 25,000 sq. ft
INDUS: Proportion of non-retail business acres per town
CHAS: Charles River dummy variable (= 1 if tract bounds river; 0 otherwise)
NOX: Nitric oxide concentration (parts per 10 million)
RM: Average number of rooms per dwelling
AGE: Proportion of owner-occupied units built prior to 1940
DIS: Weighted distances to five Boston employment centers
RAD: Index of accessibility to radial highways
TAX: Full-value property tax rate per $10,000
PTRATIO: Pupil-teacher ratio by town
B: 1000(Bk — 0.63)², where Bk is the proportion of by town
LSTAT: Percentage of lower status of the population
MEDV: Median value of owner-occupied homes in $1000s

Los precios de la casa indicados por la variable MEDV es nuestra variable objetivo y el resto son las variables de características en función de las cuales predeciremos el valor de una casa.

Ahora cargaremos los datos en un dataframe de pandas usando pd.DataFrame. Nosotros, a continuación, imprimir las primeras 5 filas de los datos, usando head()

podemos ver que el valor objetivo MEDV falta de los datos. Creamos una nueva columna de valores de destino y la agregamos al marco de datos.

procesamiento de Datos

Después de cargar los datos, es una buena práctica para ver si hay alguna falta de valores en los datos. Contamos el número de valores faltantes para cada entidad utilizando isnull()

Sin embargo, no faltan valores en este conjunto de datos, como se muestra a continuación.

Análisis Exploratorio de Datos

Análisis exploratorio de Datos es un paso muy importante antes de que el modelo de formación. En esta sección, usaremos algunas visualizaciones para comprender la relación de la variable de destino con otras características.

Primero vamos a trazar la distribución de la variable de destino MEDV. Usaremos la función distplot de la biblioteca seaborn.

Podemos ver que los valores de MEDV se distribuyen normalmente con pocos valores atípicos.

A continuación, creamos una matriz de correlación que mide las relaciones lineales entre las variables. La matriz de correlación se puede formar utilizando la función corr de la biblioteca de marcos de datos pandas. Usaremos la función heatmap de la biblioteca seaborn para trazar la matriz de correlación.

El coeficiente de correlación de rangos de -1 a 1. Si el valor es cercano a 1, significa que hay una fuerte correlación positiva entre las dos variables. Cuando está cerca de -1, las variables tienen una fuerte correlación negativa.Observaciones

:

  • Para ajustarse a un modelo de regresión lineal, seleccionamos aquellas características que tienen una alta correlación con nuestra variable objetivo MEDV. Al observar la matriz de correlación, podemos ver que RM tiene una fuerte correlación positiva con MEDV (0.7) donde as LSTAT tiene una alta correlación negativa con MEDV (-0.74).
  • Un punto importante en la selección de entidades para un modelo de regresión lineal es comprobar la multi-co-linealidad. Las características de RADTAX tienen una correlación de 0.91. Estos pares de características están fuertemente correlacionados entre sí. No debemos seleccionar ambas características juntas para entrenar el modelo. Revisa esto para ver una explicación. Lo mismo ocurre con las características DIS y AGE que tienen una correlación de -0.75.

En base a las observaciones anteriores, RM y LSTAT como nuestras características. Usando un gráfico de dispersión, veamos cómo varían estas características con MEDV.

Observaciones:

  • Los precios aumentan a medida que el valor de RM aumenta linealmente. Hay pocos valores atípicos y los datos parecen estar limitados a 50.
  • Los precios tienden a disminuir con un aumento en LSTAT. Aunque no parece seguir exactamente una línea lineal.

Preparando los datos para entrenar el modelo

Concatenamos las columnas LSTAT y RM utilizando np.c_ proporcionadas por la biblioteca numpy.

Dividir los datos en conjuntos de entrenamiento y pruebas

A continuación, dividimos los datos en conjuntos de entrenamiento y pruebas. Entrenamos el modelo con el 80% de las muestras y probamos con el 20% restante. Hacemos esto para evaluar el rendimiento del modelo en datos invisibles. Para dividir los datos utilizamos la función train_test_split proporcionada por la biblioteca scikit-learn. Finalmente imprimimos los tamaños de nuestro conjunto de entrenamiento y prueba para verificar si la división se ha producido correctamente.

(404, 2) 
(102, 2)
(404,)
(102,)

la Formación y prueba del modelo

utilizamos scikit-learn LinearRegression para entrenar a nuestro modelo en ambos conjuntos de pruebas y entrenamiento.

Evaluación del modelo

Evaluaremos nuestro modelo utilizando RMSE y R2-score.

The model performance for training set 
--------------------------------------
RMSE is 5.6371293350711955
R2 score is 0.6300745149331701 The model performance for testing set
--------------------------------------
RMSE is 5.137400784702911
R2 score is 0.6628996975186952

Esto es bueno para empezar. En los próximos blogs, veremos formas de aumentar el rendimiento del modelo.

El Cuaderno completo de Jupyter se puede encontrar aquí.

Conclusión

En esta historia, aplicamos los conceptos de regresión lineal en el conjunto de datos de viviendas de Boston. Recomendaría probar otros conjuntos de datos también.

Aquí hay algunos lugares que usted puede buscar datos

  • https://www.kaggle.com/datasets
  • https://toolbox.google.com/datasetsearch
  • https://archive.ics.uci.edu/ml/datasets.html

Gracias por Leer!!

En la siguiente parte de esta serie, cubriremos la Regresión polinómica. Mira este espacio para más.

Related Posts

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *