본문 바로가기
카테고리 없음

머신 러닝 학습_3

by 랜턴K 2024. 6. 18.
반응형

지금까지 결정트리 방식으로 진행했다.

그리고 random_state 외에 별 다른 변수를 설정하지 않았다.

이 경우, 모든 리프가 단일 값을 갖거나 

모든 데이터 포인트가 동일 값을 갖는 경우까지 학습이 진행된다.

 

이런 경우 Overfitting이 발생할 수 있다.

즉, 일반적인 경향성 기반의 판단을 하게 되는 게 아니라

데이터의 지나친 바이어스와 세부사항까지 학습하게 되는 것이다.

 

따라서, 오버피팅이 되지 않도록 모델의 변수를 최적화시켜야 한다,

결정트리 모델의 경우, 모델의 Depth를 제어할 수 있다. 

 

기본 골자는 같다. 

get_mae라는 함수를 선언한다. 

이 함수는 맥스_리프_노드 값에 따라 

모델을 학습하고, 예측하고, MAE 값을 반환하는 함수다 

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

def get_mae(max_leaf_nodes, train_X, val_X, train_y, val_y):
    model = DecisionTreeRegressor(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)

 

 

노드 5,50,500,5000 각각에 대해, 오차를 측정해본다 

그 중에 가장 낮은 오차를 갖는 Depth를 선택할 수 있다. 

# compare MAE with differing values of max_leaf_nodes
for max_leaf_nodes in [5, 50, 500, 5000]:
    my_mae = get_mae(max_leaf_nodes, train_X, val_X, train_y, val_y)
    print("Max leaf nodes: %d  \t\t Mean Absolute Error:  %d" %(max_leaf_nodes, my_mae))
반응형