하이퍼파라미터 값에 따른 모델 성능 변화를 시각화 *하이퍼파라미터 : 모델의 성능에 영향을 미칠 수 있는 요소 (ex: 결정 트리‘s 깊이, 신경망‘s 학습률,...)
*Scikit-learn **validation_curve
잔차 플롯 Residual Plot
실제 값과 예측 값의 차이를 시각화하여 모델의 적합성을 평가
*Seaborn **residplot
# [과적합/과소적합 평가를 위한 파이썬 함수/패키지 사용 예]# 1.Training Loss "Keras"
loss = model.evaluate(X_train, y_train)
# 2.Validation Loss "Keras"
val_loss = model.evaluate(X_val, y_val)
# 3.Training Accuracy "Keras"
accuracy = model.evaluate(X_train, y_train)
# 4.Validation Accuracy "Keras"
val_accuracy = model.evaluate(X_val, y_val)
# 5.Learning Curve "Scikit-learn"
train_sizes, train_scores, val_scores = learning_curve(model, X, y)
# 6.Validation Curve "Scikit-learn"
train_scores, val_scores = validation_curve(model, X, y, param_name='C', param_range=param_range)
# 7.Residual Plot "Seaborn"
sns.residplot(x=y_test, y=predictions)
④ 과적합 방지 방법
과적합 방지법
설명
목적 및 특징
조기 종료 Early Stopping
검증 성능이 개선되지 않으면 학습을 중단하여 과적합을 방지
- 학습 시간을 단축
학습률 조정 Learning Rate Adjustment
학습률을 조정하여 과적합을 방지하고 최적의 가중치를 찾음
- 적절한 학습률 설정으로 모델 성능 최적화
규제 기법 Regularization
라쏘(Lasso), 릿지(Ridge) 회귀와 같은 규제 기법을 사용하여 과적합을 방지
- 모델의 복잡도를 제어 - 불필요한 피처의 가중치 감소 또는 제거
데이터 증강 Data Augmentation
훈련 데이터를 변형하거나 증강하여 데이터의 다양성을 확보
- 데이터 부족 문제 해결
앙상블 방법 Ensemble Methods
여러 개의 학습기를 결합하여 예측 성능을 향상하고 과적합을 방지
- 모델의 안정성 향상
프루닝 Pruning
중요하지 않은 기능이나 파라미터를 제거하여 모델을 간소화 * 결정 트리와 같은 모델에서 사용되는 기법으로, 모델이 복잡해지는 것을 방지하기 위해 불필요하거나 덜 중요한 노드(branches)를 제거
- 모델의 복잡도 감소
교차 검증 Cross-Validation
데이터를 여러 폴드로 나누어 각각의 폴드를 검증 데이터로 사용하여 평가
- 모델이 특정 데이터셋에 과도하게 맞추지 않도록 함 - 모델의 일반화 성능 향상
피처 엔지니어링 Feature Engineering
불필요한 피처 제거, 중요한 피처 선택, 파생 피처 생성 등을 통해 모델 성능 최적화
- 모델의 복잡도 감소 - 데이터의 품질 향상
교차 검증 (Cross-Validation)
교차 검증 기법
데이터 분할 방식
클래스 비율 유지
특징
KFold
데이터를 K개의 폴드로 무작위로 나눔
X
- 각 폴드의 데이터 분포가 무작위로 결정됨 - 클래스 불균형 가능성 있음
StratifiedKFold
데이터를 K개의 폴드로 나누되, 각 폴드에서 클래스 비율을 유지
O
- 클래스 비율을 유지하며 데이터를 나누므로 불균형 클래스 문제를 해결할 수 있음
ShuffleSplit
전체 데이터셋을 무작위로 섞고, 지정된 비율로 트레이닝/테스트 세트 분할
X
- 각 반복에서 테스트 세트와 트레이닝 세트의 비율이 일정하게 유지되며 무작위로 샘플링 - 여러 번 반복 가능
[TIP] KFold
- 기본 개념 : KFold는 데이터를 K개의 폴드로 나눈 후, 각 폴드를 테스트 세트로 사용하고 나머지 폴드들을 트레이닝 세트로 사용하는 방식. 이 과정을 K번 반복하여 모델의 성능을 평가 - 특징 : 데이터를 무작위로 분할하므로, 클래스나 그룹의 비율을 고려하지 않음. 따라서, 불균형한 데이터셋에서는 특정 클래스가 한 폴드에 치우칠 수 있음 - 사용 사례 : 데이터셋이 비교적 균형 잡혀 있고, 클래스 간 비율이 크게 중요하지 않은 경우에 일반적으로 사용
[TIP] StratifiedKFold
- 기본 개념 : StratifiedKFold는 KFold와 유사하지만, 각 폴드가 전체 데이터셋의 클래스 분포를 반영하도록 분할함. 이를 통해 각 폴드 내에서도 클래스의 비율이 전체와 유사하게 유지됨 - 특징 : 데이터셋이 불균형할 때 유용하며, 모델이 모든 클래스에 대해 고르게 학습할 수 있도록 함. 이는 특히 클래스 간의 비율이 중요한 문제에서 유용함 - 사용 사례 : 클래스 불균형 문제가 있는 데이터셋에서 모델 성능을 평가하거나, 각 클래스가 고르게 분포되도록 하고자 할 때 사용
[TIP] ShuffleSplit
- 기본 개념 : ShuffleSplit은 데이터셋을 무작위로 섞은 후, 학습 데이터와 검증 데이터를 여러 번 반복해서 나누는 방식. 각 분할에서 데이터가 임의로 섞여 학습 셋과 검증 셋이 구성되며, 이를 통해 모델의 성능을 여러 번 평가할 수 있음 - 특징 : 데이터를 무작위로 분할하기 때문에 데이터셋의 특정 순서나 패턴에 의존하지 않고 모델을 평가할 수 있음. 또한, 각 분할에서 학습 셋과 검증 셋의 크기를 유연하게 설정할 수 있어, 데이터셋의 크기나 분포에 따라 적절하게 조정할 수 있음 - 사용 사례 : 데이터셋이 작거나 특정한 분포가 없는 경우에 모델 성능을 평가할 때 사용. 또한, 모델이 특정 데이터 패턴에 과적합되는 것을 방지하고자 할 때, ShuffleSplit을 통해 데이터의 다양한 샘플링을 활용하여 보다 일반화된 성능을 평가
피처 엔지니어링 (Feature Engineering)
기법
설명
목적 및 특징
불필요한 피처 제거
중요하지 않거나 관련 없는 피처를 제거하여 모델의 복잡도를 줄임
- 과적합 방지 - 모델의 해석 가능성 향상
중요한 피처 선택
피처 중요도 평가를 통해 모델 성능에 중요한 피처만 선택
- 모델의 성능 향상 - 불필요한 피처로 인한 노이즈 감소
파생 피처 생성
원본 데이터를 변형하여 새로운 유의미한 피처를 생성
- 모델의 학습 능력 향상 - 도메인 지식을 활용한 피처 추가
* 프루닝은 모델 내부의 구조를 단순화하는 과정이라면, 피처 제거는 데이터셋 자체를 간소화하는 과정