교차검증(Cross-Validation)
- 이 전 포스팅 까지 훈련/검증/테스트 세트로 나누어 학습했다.
- 이 방법을 Hold-out 교차검증이라 하는데 이 방법의 문제점은
- 학습에 사용가능한 데이터가 충분하다면 문제가 없겠지만, 훈련세트의 크기가 모델학습에 충분하지 않을 경우 문제가 될 수 있다.
- 검증세트 크기가 충분히 크지 않다면 예측 성능에 대한 추정이 부정확할 것이다.
- 모델 선택(Model Selection)문제
- 문제를 풀기 위해 어떤 학습 모델을 사용해야 할 것인가?
- 어떤 하이퍼파라미터를 사용할 것인가?
- 데이터의 크기에 대한 문제, 모델선택에 대한 문제를 해결하기 위해 사용하는 방법 중 한가지는 교차검증이다.
(교차검증은 시계열(time series))데이터에 적합하지 않다.)
교차검증 사용
- 교차검증을 위해서는 데이터를 k개로 등분해야 하는데 이를 k-fold cross validation(CV)라고 한다.
- k개의 집합에서 k-1 개의 부분집합을 훈련에 사용하고 나머지 부분집합을 테스트 데이터로 검증하게 된다.
- 데이터를 3등분하고 검증과 훈련세트를 총 세번 바꾸어가며 검증하는 것은 3-fold CV 이다.
선형모델 교차검증
1 |
|
랜덤포레스트 교차검증
1 |
|
하이퍼파라미터 튜닝
- 머신러닝 모델을 만들 때 중요한 이슈는 최적화(Optimization)와, 일반화(Generalization)이다.
- 최적화 : 훈련 데이터로 더 좋은 성능을 얻기 위해 모델을 조정하는 과정
- 일반화 : 학습된 모델이 처음 본 데이터에서 얼마나 좋은 성능을 내는 지
- 모델의 복잡도를 높이는 과정에서 훈련/검증 세트의 손실이 함께 감소하는 시점은 과소적합(Underfitting)되었다고 한다.
- 어느 시점부터 훈련데이터의 손실은 계속 감소하지만, 검증데이터의 손실이 증가하는 때는 과적합(Overfitting)되었다고 한다.
- 이상적인 모델은 Underfitting과 Overfitting 사이에 존재한다.
검증곡선(Validation curve)
- 검증곡선 : 훈련/검증데이터에 대해 y는 score, x는 하이퍼파라미터로 그린 그래프
- 하나의 파라미터만 가지고 검증곡선을 그리는 것이 현실적으로 유용하지는 않다.
1 |
|
- 이대로 트릐의 깊이를 정한다면
max_depth = 5
부근에서 설정해줘야 과적합을 막고 일반화 성능을 지킬 수 있다.
Randomized Search CV
- GridSearchCV: 검증하고 싶은 하이퍼파라미터들의 수치를 정해주고 그 조합을 모두 검증한다.
- RandomizedSearchCV: 검증하려는 하이퍼파라미터들의 값 범위를 지정해주면 무작위로 값을 지정해 그 조합을 모두 검증한다.
Ridge 회귀모델 하이퍼파라미터 튜닝
1 |
|
랜덤포레스트 하이퍼파라미터 튜닝
1 |
|
선형회귀, 랜덤포래스트 모델들의 튜닝 추천 하이퍼파라미터
Random Forest
- class_weight (불균형(imbalanced) 클래스인 경우)
- max_depth (너무 깊어지면 과적합)
- n_estimators (적을경우 과소적합, 높을경우 긴 학습시간)
- min_samples_leaf (과적합일경우 높임)
- max_features (줄일 수록 다양한 트리생성)
Logistic Regression
- C (Inverse of regularization strength)
- class_weight (불균형 클래스인 경우)
- penalty
Ridge / Lasso Regression
- alpha