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.