Métodos de filtrado en machine learning sobre problema realista

Autor: | Última modificación: 12 de diciembre de 2022 | Tiempo de Lectura: 3 minutos
Temas en este post: ,

En este artículo vamos a aplicar los métodos de filtrado en machine learning sobre la base de datos de viviendas House Sales in King County, USA.

Métodos de filtrado en machine learning: ejercicio

Para realizar nuestro ejercicio sobre problema realista de métodos de filtrado en machine learning, debemos recordar que para cada vivienda se tienen los siguientes atributos, características o features:

AtributoDescripción
ididentificador de la vivienda
datefecha
priceprecio
bedroomsnúmero de habitaciones
bathroomsnúmero de baños/aseos
sqtf_livingsuperficie habitable (en pies al cuadrado)
sqft_lotsuperficie de la parcela (en pies al cuadrado)
floorsnúmero de plantas
waterfrontindica si la vivienda tiene acceso a un lago
viewtipo de vista (variable numérica)
conditioncondición de la vivienda (variable numérica)
grademedida de la calidad de la construcción (variable numérica)
sqft_abovesuperficie por encima del suelo (en pies al cuadrado)
sqft_basementsuperficie del sótano (en pies al cuadrado)
yr_builtaño de construcción de la vivienda
yr_renovatedaño de renovación de la vivienda
latlatitud de la parcela
longlongitud de la parcela
sqft_living15superficie habitable promedio de los 15 vecinos más cercanos
sqft_lot15superficie de la parcela promedio de los 15 vecinos más cercanos
#Métodos de filtrado en machine learning
#cargamos datos
house_data = pd.read_csv ("./data/kc_house_data.csv")    #cargamos fichero

#Eliminamos las columnas id y date
house_data = house data.drop (['id date'], axis = 1)

#convertir las variables en pies al cuadrado en metros al cuadrado
feetFeatures = ['sqft_living', 'sqft_lot', 'sqft_above', 'sqft_basement', 'sqft_living15', 'sqft_lot15']
house_data [feetFeatures] = house_data [feetFeatures].apply (lambda x: x * 0.3948 * 0.3048)

#renombramos
house_data.columns = ['price', 'bedrooms', 'bathrooms', 'sqm_living', 'sqm_lot', 'floors', 'waterfront_view', 'condition_grade', 'sqm_above', 'sqm_basement', 'yr_built', 'yr_renovated', 'zip code', 'lat', 'long', 'sqm_living15', 'sqm_lot15']

#añadimos las nuevas variables
#Métodos de filtrado en machine learning
#creación de la variable "years" con base en la variable "yr_built"
house_data ['years'] = 2017 - house_data ['yr_built']
#creación de "bedrooms_squared", que es una característica basada en "bedrooms"
house_data ['bedrooms_squared'] = house_data [bedrooms].apply (lambda x: x ** 2)
house_data ['bed_bath_rooms'] = house_data [bedrooms'] * house_data ['bathrooms']
house_data ['log_sqm_living'] = house_data [sqm_living'].apply (lambda x: np.log (x))
house_data ['lat_plus_long'] = house_data ['lat'] * house_data ['long']

A partir del comentario «añadimos las nuevas variables» estamos ejecutando lo que se conoce como ingeniería de características, que básicamente consiste en agregar características o funciones al algoritmo que, si bien no son indispensables, sí brindan un panorama más amplio del mismo y lo explican de manera más detallada.

Además, la ingeniería de características consiste en generar nuevas características a partir de las existentes.

#Métodos de filtrado en machine learning
house_data.head ().T
Métodos de filtrado en machine learning sobre problema realista 1
Métodos de filtrado en machine learning sobre problema realista 2
#Métodos de filtrado en machine learning
import seaborn as sns

#Compute the correlation matrix
corr = np.abs (house_data.drop (['price'], axis = 1).corr ())

#Generate a mask for the upper triangle
mask= np.zeros_like (corr, dtype = np.bool)
mask [np.triu_indices_from (mask)] = True

# Set up the matplotlib figure
f, ax = plt.subplots (figsize = (12, 10))

#Métodos de filtrado en machine learning
#Draw the heatmap with the mask and correct aspect ratio
sns.heatmap (corr, mask = mask, vmin = 0.0, vmax = 1.0, center = 0.5, linewidths = .1, cmap = "YLGnBu", cbar_kws = {"shrink": .8})

plt.show()
Métodos de filtrado en machine learning

Aquí vemos cómo existe una correlación demasiado alta entre years y yr_built (cuadro muy sombreado, casi negro). Esto es porque con estas dos variables creamos una ingeniería de características.

Ahora, lo que haremos es el f_test y mutual_info_regression de las features o características.

#Métodos de filtrado en machine learning
#convertimos el DataFrame al formato necesario para scikit- learn
data = house data.values

y = data [ : , 0:1] #nos quedamos con la 1 columna, price
X = data[ : , 1 : ] #nos quedamos con el resto

feature_names = house data.columns [1:]

#do calculations
f_test, = f_regression (x, y)
f_test /= np.max (f_test)

mi = mutual_info_regression (x, y)
mi =/ np.max (mi)

#do some plotting
plt.figure (figsize = (20, 5))

plt.subplot (1, 2, 1)
plt.bar (range (X.shape [1]), f_test, align = "center")
plt.xticks (range (X.shape [1]), feature_names, rotation = 90)
plt.xlabel ('features')
plt.ylabel ('Ranking')
plt.title ('$R ^ 2$ score')

plt.subplot (1, 2, 2)
plt.bar (range (x.shape [1]), mi, align = "center")
plt.xticks (range(X.shape[1]), feature names, rotation = 90)
plt.xlabel ('features') 
plt.ylabel ('Ranking')
plt.title ('Mutual information score')

plt.show ()
Métodos de filtrado en machine learning sobre problema realista 3

¿Qué es lo que pasa aquí? Según la primera gráfica de los R2 score, los metros cuadrados son muy importantes (el grado, que se refiere a la calidad de los materiales).

Así, según la gráfica del mutual info score, por algún motivo, el código postal es la variable más importante de todas.

¿Qué sigue?

Si quieres seguir aprendiendo sobre una de las disciplinas más importantes del mercado actual, recuerda que tenemos el Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp, una formación intensiva en la que aprenderás toda la fundamentación teórica y práctica para incursionar en este mundillo. ¡Anímate a impulsar tu carrera y solicita más información ahora!

👉 Descubre más del Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp ¡Descarga el temario!

👉 Prueba el Bootcamp Gratis por una Semana ¡Empieza ahora mismo!

👉 Conoce nuestros otros Bootcamps en Programación y Tecnología

[email protected]

¿Trabajo? Aprende a programar y consíguelo.

¡No te pierdas la próxima edición del Aprende a Programar desde Cero Full Stack Jr. Bootcamp!

 

Prepárate en 4 meses, aprende las últimas tecnologías y consigue trabajo desde ya. 

 

Solo en España hay más de 120.400 puestos tech sin cubrir, y con un sueldo 11.000€ por encima de la media nacional. ¡Es tu momento!

 

🗓️ Próxima edición: 13 de febrero

 

Reserva tu plaza descubre las becas disponibles.