2. Ajust de models
Overfitting i underfitting¶
Descarrega el dataset preu de les cases a Iowa (train.csv)
A la teoria hem vist que hi ha formes de controlar el subajustament i el sobreajustament.
En el cas de l'algorisme DecissionTreeRegressor, l'ajust de paràmetres ens permete que algunes rutes a través de l'arbre tinguen una profunditat més gran que altres rutes, per exemple.
També podem controlar la profunditat màxima amb l'argument max_leaf_nodes. Simplement modificant-lo, podem controlar el sobreajustament i el subajustament ja que com més fulles permetem que el model faça, més ens movem de l'àrea entre el underfitting i el overfitting.
Carreguem les dades i preparem les dades per al model¶
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')
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)
home_data_encoded = home_data_encoded.dropna(axis=1)
X = home_data_encoded.drop('SalePrice', axis = 1)
y = home_data_encoded['SalePrice']
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=1)
Pregunta 1¶
Crea una funció get_mae que reba com a arguments:
- max_leaf_nodes
- X_train: dades per a entrenament
- X_test: dades de validació
- y_train: target d'entrenament
- y_test: target de validació
I torne l'error absolut mitjà.
Pregunta 2¶
Utilitzant la funció de l'anterior pregunta, fes un gràfic per veure com evoluciona el mae al variar el max_leaf_nodes entre els valors 2 i 300.
Pregunta 3¶
Explica el gràfic anterior. Es correspon amb el que hem explicat teòricament?
Pregunta 4¶
Amb l'ajuda del gràfic anterior intenta determinar en al voltant de quin valor es situa el max_leaf_nodes òptim.
Fes diversos gràfics al voltant dels valors òptims de mae fins determinar el mae òptim.
Pregunta 5¶
Quin és el mae òptim segons les observacions gràfiques?
Pregunta 6¶
Fes un algorisme per determinar quin és el paràmetre òptim de mx_leaf_node.
Pregunta 7¶
Calcula el mae per al valor max_leaf_node = 73.
Quina és la diferència respecte a un valor max_leaf_node = 87?
Pregunta 8¶
Encara que el valor òptim del paràmetre max_leaf_node és 87, computacionalment seria més convenient agafar el valor 73, ja que tardaria menys en executar? Demostra la teua afirmació fent un càlcul d'una dada aleatòria. Utilitza la funció sample() per agafar una dada aleatòria d'un dataframe.
Pregunta 9¶
Fes una funció que imprimisca per consola tres valors, les prediccions del model amb max_leaf_nodes = 73 i max_leaf_nodes = 87 i la diferència.
Utilitza eixa funció per a provar amb 10 valors aleatòris.
Moltes vegades dóna el mateix valor. És normal? Justifica la resposta.