https://www.kaggle.com/code/dansbecker/underfitting-and-overfitting
Underfitting and Overfitting
Explore and run machine learning code with Kaggle Notebooks | Using data from multiple data sources
www.kaggle.com
위의 글을 보고 참고하여 작성하였습니다.
앞서 평균 절대 오차(MAE) 값으로 모델의 성능을 평가했습니다.
대체 모델을 실험하고 어떤 모델이 가장 좋은 예측을 제공하는지 확인할 수 있었습니다.
scikit-learn의 의사결정 트리 모델에 많은 옵션 중 가장 중요한 옵션은 나무의 깊이입니다.
의사결정 트리 모델의 주요 하이퍼파라미터 중 트리의 깊이는 예측 정확도에 큰 영향을 미치며 깊이를 조절하여 모델의 성능을 최적화할 수 있습니다.
- 트리의 깊이는 리프 노드(leaf node)에 도달하기 전 트리가 분할되는 횟수를 의미합니다.
- 깊이가 얕을수록 트리는 덜 분화되고 모델이 단순해집니다.
- 깊이가 깊을수록 트리는 세분화되고 모델이 복잡해집니다.
다음은 과적합(Overfitting), 과소적합 (Underfitting)에 대해 알아보겠습니다.
과적합 (Overfitting)은 훈련 데이터에 있는 모든 세부 사항과 노이즈까지 학습하고 훈련 데이터에 대한 예측은 매우 정확하지만, 새로운 데이터에 대해서는 정확도가 떨어집니다.
트리의 깊이가 10인 경우, 1024개의 잎이 있을 수 있으며 각 잎에는 매우 적은 수의 데이터 포인트가 포함됩니다.
이는 모델이 특정 데이터 포인트에 집중되어 있음을 의미합니다.
과소적합(Underfitting)은 트리가 너무 얕아서 데이터의 패턴을 학습하지 못하는 경우로, 훈련 데이터와 새로운 데이터에 대한 예측이 부정확하고 성능이 떨어집니다.
트리의 깊이가 1인 경우, 데이터는 2개의 그룹으로 나뉘며, 학습할 수 있는 데이터는 2개뿐입니다.
- 최적의 깊이를 찾기 위해서는 과적합(Overfitting)과 과소적합(Underfitting)의 균형을 맞추는 것이 중요합니다.
위의 그래프에서 과소적합과 과적합의 균형은 검증 데이터의 곡선이 가장 낮은 지점입니다.
트리 깊이를 제어하는 방법으로 max_leaf_nodes 인수는 과적합과 과소적합을 제어하는 데 매우 유용합니다.
이는 트리의 각 경로가 다른 경로보다 더 깊을 수 있게 허용하면서 최종 잎 노드 수를 제한함으로써 과적합과 과소적합을 제어할 수 있습니다.
from sklearn.metrics import mean_absolute_error # MAE 계산을 위한 라이브러리
from sklearn.tree import DecisionTreeRegressor # 결정 회귀 트리 모델
def get_mae(max_leaf_nodes, train_X, val_x, train_y, val_y):
# max_leaf_nodes를 매개변수로 하여 DecisionTreeRegressor 모델 초기화
model = DecisionTreeRegressor(max_leaf_nodes=max_leaf_nodes, random_state=0)
# 훈련 데이터를 사용하여 모델 학습
model.fit(train_X, train_y)
# 검증 데이터를 사용하여 예측값 생성
preds_val = model.predict(val_x)
#실제값과 예측값 사이의 MAE계산
mae = mean_absolute_error(val_y, preds_val)
return mae
# 다양한 max_leaf_nodes 값을 사용하여 MAE 계산 및 출력
for max_leaf_nodes in [5, 50, 500, 5000]:
# 현재 max_leaf_nodes 값을 사용하여 MAE 계산
my_mae = get_mae(max_leaf_nodes, train_X, val_x, train_y, val_y)
# max_leaf_nodes값과 MAE값 출력
print("Max leaf nodes: %d \t\t Mean Absolute Error: %d" %(max_leaf_nodes, my_mae))
따라서 MAE값이 제일 낮은 최적의 leaf_nodes는 500 임을 알 수 있습니다.
'머신러닝(Machine leanring)' 카테고리의 다른 글
(6) 머신러닝(Machine learning)이란? - Random Forests [Hellfer] (0) | 2024.07.21 |
---|---|
(4) 머신러닝(Machine learning)이란? - Model Validation [Hellfer] (0) | 2024.07.19 |
(3) 머신러닝(Machine learning)이란? - Your First Machine Learning Model [Hellfer] (0) | 2024.07.18 |
(2) 머신러닝(Machine learning)이란? - Basic Data Exploration [Hellfer] (0) | 2024.07.17 |
(1) 머신러닝(Machine learning)이란? - How Models Work [Hellfer] (0) | 2024.07.16 |
원-핫 인코딩(One Hot Encoding)이란? - [Hellfer] (0) | 2024.07.05 |