1. Comparació de models
Comparació de models de regressió per al preu de les cases de IOWA¶
Descarrega el dataset preu de les cases a Iowa (train.csv)
A l'activitat anterior utilitzarem el DecisionTreeRegressor per fer prediccions del preu de la vivenda a IOWA. En esta activitat anem a provar de nou el DecisionTreeRegressor amb més característiques i altres algorismes de ML per fer les nostres prediccions i comparar els diferents resultats dels models:
- LinearRegression: Busca la recta que més s'ajusta a les dades per minimitzar l'error.
- Support Vector Machines - SVM: Busca l'hiperplà que millor s'ajusta a la distribució de dades.
- Random Forest: Combina les prediccions de múltiples arbres de decisió per millorar la precisió i reduir el sobreajustament.
- GradientBoostingRegressor: Construeix arbres successius per corregir els errors dels anteriors i millorar progressivament la precisió.
- LASSO: Realitza regressió amb penalització, reduint alguns coeficients a zero per anar descartant algunes característiques.
- RIDGE: Semblant a LASSO i evita l'ús de coeficient molt grans.
Compte!
Utiliza un random_state = 1 en fer la separació en blocs d'entrenament i validació en tots els models per poder comparar els errors
Càrrega de dades¶
Carreguem les dades train.csv a una variable home_data.
import warnings
warnings.filterwarnings('ignore')
import pandas as pd
iowa_file_path = 'data/train.csv'
home_data = pd.read_csv(iowa_file_path, index_col='Id')
home_data.head()
Preparem les dades¶
En l'anterior pràctica ens quedarem solament amb dades numèriques. El DataFrame conté dades categòriques, però ja vam estudiar el one-hot encoding per a transformar-les en numèriques. En esta ocasió, per no crear noves columnes i relantitzar els càlculs, anem a aplicar el mètode LabelEncoder, que directament substitueix els valors categòrics per números.
Aplica'l per convertir totes les dades en numèriques.
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
home_data_encoded = home_data.apply(lambda col: le.fit_transform(col) if col.dtype == 'O' else col)
print(home_data.info())
print(home_data_encoded.info())
Com pots observar, hi ha columnes amb valors nulls. Podriem aplicar les tècniques estudiades per reomplir el buits, però per simplicitat, anem a eliminar eixes columnes.
home_data_encoded = home_data_encoded.dropna(axis=1)
print(home_data_encoded.info())
Finalment ens hem quedat amb 76 columnes. Pareix que ja tenim les dades preparades.
Pregunta 1 - Divisió en blocs d'entrenament i validació¶
Divideix les dades en blocs per a entrenament i validació. En este cas, anem a utilitzar totes les columnes (recorda que ja vam estudiar com passar les columnes categòriques a dades numèriques), excepte el target per a entrenar els models. Recorda utilitzar el random_state = 1
Pregunta 2 - DecisionTreeRegressor¶
Aplica l'algorisme DecisionTreeRegressor i calcula el seu MAE. Ha millorat o ha empijorat? Perquè?
from sklearn.tree import DecisionTreeRegressor
from sklearn.metrics import mean_absolute_error
##
Pregunta 4 - Regressió linial¶
Crea un model de regressió linial i calcula l'error absolt mitjà.
from sklearn.linear_model import LinearRegression
Pregunta 5 - Support Vector Machines (SVM)¶
Crea un model de SVM i calcula l'error absolt mitjà.
from sklearn.svm import SVR
Pregunta 6 - Random Forest¶
Crea un model de Random Forest (amb random_state = 1) i calcula l'error absolt mitjà.
from sklearn.ensemble import RandomForestRegressor
Pregunta 7 - GradientBoostingRegressor¶
Crea un model de GradientBoostingRegressor i calcula l'error absolt mitjà.
from sklearn.ensemble import GradientBoostingRegressor
Pregunta 8 - Regressió LASSO¶
Crea un model de Lasso amb alpha = 1 i random_state = 1 i calcula l'error absolt mitjà.
from sklearn.linear_model import Lasso
Pregunta 9 - Regressió RIDGE¶
Crea un model de Ridge amb alpha = 1 i random_state = 1 i calcula l'error absolt mitjà.
from sklearn.linear_model import Ridge
Pregunta 10 - Comparació de resultats¶
Quin model escolliries per fer les teues prediccions? Fes un gràfic per reforçar la teua resposta.
El millor model és el GradientBoostingRegressor ja que té l'error absolut mitjà més baix. Per comparar els errors, podem fer un gràfic de barres.