yoooniverse

[kaggle] Learn Tutorial_Intro to Machine Learning (정리)_2 본문

KAGGLE/Intro to Machine Learning

[kaggle] Learn Tutorial_Intro to Machine Learning (정리)_2

Ykl 2022. 11. 4. 01:55

< Underfitting & Overfitting >

Underfitting

When a model fails to capture important distinctions and patterns in the data, so it performs poorly even in training data.

Failing to capture relevant patterns, again leads to less accurate predictions.

 

Overfitting

where a model matches the training data almost perfectly but does poorly in validation and other new data.

 

Since we care about the accuracy of new data, which we estimate from our validation data, we want to find the sweet spot between underfitting and overfitting.

 

  • Tree Depth와 MAE의 관계를 보여주는 그래프.

As the tree gets deeper, the value of MAE on training drops steadily.

But at some point, the value of MAE on validation data starts to grow up.

We need to find the sweet spot, as marked on the graph with a yellow sign.

 

 

 

 


해당 내용을 구현한 코드

DecisionTreeRegressor에 max_leaf_nodes 값을 설정해 인자로 넣어주면 트리의 깊이를 설정할 수 있다.

트리 깊이에 따른 prediction값들의 MAE value를 뽑아 그 수치를 비교해 보는 과정.

from sklearn.metrics import mean_absolute_error
from sklearn.tree import DecisionTreeRegressor

def get_mae(max_leaf_nodes, train_X, train_y, val_X, val_y):
	model = DecissionTreeRegressor(max_leaf_nodes=max_leaf_nodes, random_state=0)
    model.fit(train_X, train_y)
    preds_val = model.predict(val_X)
    mae = mean_absolute_error(val_y, preds_val)
    return(mae)

for max_leaf_nodes in [5, 50, 500, 5000]:
	my_mae = get_mae(max_leaf_nodes, train_X, train_y, val_X, val_y)
    print("Max leaf nodes: %d  \t\t Mean Absolute Error:  %d" %(max_leaf_nodes, my_mae))

결과에 따르면 leaf node 500개를 가지는 트리 모델로 학습했을 경우 가장 optimal한 MAE 값을 보이는 것을 알 수 있다.

 


트리가 너무 깊으면 : Overfit

트리가 너무 얕으면 : Underfit

underfitting과 overfitting 사이에서 고통받는 model들.

이를 극복하고 better performance를 구현할 수 있는 방법에는 무엇이 있을까?

 

< Random Forest >

The random forest uses many trees, and it makes a prediction by averaging the predictions of each component tree.

It generally has much better predictive accuracy than a single decision tree and it works well with default parameters.

(you can learn more models with even better performance, but many of those are sensitive to getting the right parameters.)

 

트리를 여러 개 사용 해 모델 학습을 시키고, 각 모델들의 prediction 값들의 평균을 최종 예측값으로 쓰는 것.

 

예시 코드

from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_absolute_error

forest_model = RandomForestRegressor(random_state=1)
forest_model.fit(train_X, train_y)
melb_preds = forest_model.predict(val_X)
print(mean_absolute_error(val_y, melb_preds))

Decision Tree Regressor 클래스 대신 Random Forest Regressor를 사용했음을 알 수 있다.

그것 이외에는 앞 코드의 진행방식과 전부 동일

출력한 mae 값은 약 191669.

leaf node 500개인 single tree의 mae값과 비교했을 때(약 250000) 매우 좋아진 결과임을 확인 할 수 있다.

one of the best features of Random Forest models is that they generally work reasonably even without this tuning

여기서 tuning의 의미) 앞서 최소한의 mae를 찾기 위해 leaf node의 사이즈를 비교하며 여러번 모델 학습을 진행한 과정을 뜻하는 것 같다.

Comments