Métodos de filtrado en machine learning sobre problema realista

Contenido del Bootcamp Dirigido por: | Última modificación: 10 de abril de 2024 | Tiempo de Lectura: 3 minutos

Algunos de nuestros reconocimientos:

Premios KeepCoding

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
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.

🔴 ¿Quieres formarte en Inteligencia Artificial a un nivel avanzado? 🔴

Descubre nuestro Inteligencia Artificial Full Stack Bootcamp. La formación más completa del mercado y con empleabilidad garantizada

👉 Prueba gratis el Bootcamp en Inteligencia Artificial por una semana
#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 ()

¿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!

Posts más leídos

¡CONVOCATORIA ABIERTA!

Inteligencia Artificial

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado