머신러닝(Machine Learning) 후반전 - 모델 검증 및 하이퍼파라미터 튜닝

728x90
반응형

모델을 검증하고, 하이퍼파라미터를 조정하는 것은 악기를 조율하는 것과 유사합니다.

 

 

머신러닝 후반전 
데이터 스플릿(Data Split) → 모델 선택 및 학습 → 모델 검증 및 하이퍼파라미터 튜닝 → 성능 평가

 

 

서론

 

이전에 머신러닝의 기초적인 부분, 데이터 전처리 및 모델 학습에 대해 상세히 알아보았습니다. 그런데 학습만큼 중요한 것이 바로 '검증'입니다. 그리고 검증 과정에서 나오는 결과를 통해 모델을 더욱 개선하는 것, 이것이 바로 '하이퍼파라미터 튜닝'입니다. 이번 글에서는 바로 그 두 주제, 머신러닝(Machine Learning) 후반전 - 모델 검증 및 하이퍼파라미터 튜닝에 대해 알아보려 합니다. 모델이 잘 학습하고 있는지, 그리고 그 성능을 더욱 향상시킬 수 있는 방법은 무엇인지 함께 살펴보며, 머신러닝을 한층 더 깊게 이해해보려고 합니다.

 

그럼 그동안 우리가 함께 쌓아온 지식 위에 더해보도록 하겠습니다. 모델이 우리의 기대를 충족시키기 위해서는, 그것을 제대로 검증하고 필요에 따라 세부 설정을 조정하는 것이 중요합니다. 이 과정을 통해, 우리는 모델이 학습 데이터에 너무 맞춰져 있어 새로운 데이터에 적응하지 못하는 과적합을 방지하고, 더 넓은 범위의 데이터에 대한 성능을 향상시킬 수 있습니다. 먼저, 학습한 모델이 얼마나 잘 동작하는지 판단하기 위한 검증 방법에 대해 살펴보겠습니다. 그 다음으로, 각 모델의 성능을 더욱 향상시키기 위해 사용할 수 있는 하이퍼파라미터 예시를 확인해보겠습니다. 이를 통해, 머신러닝 모델을 더욱 효과적으로 이해하고 활용하는 데 필요한 지식을 얻을 수 있을 것입니다.

 

모델 검증

 

실제 머신러닝 모델 검증에 대한 예시를 들어볼게요. 머신러닝에서 가장 기본적인 모델 검증 방법 중 하나는 학습 데이터를 '학습 데이터셋'과 '검증 데이터셋'으로 분리하는 것입니다. 이를 '홀드아웃 검증'이라고 부릅니다.

 

예를 들어, 우리가 손글씨 숫자 이미지를 분류하는 모델을 만든다고 가정해봅시다. 10,000개의 이미지 데이터가 있다면, 이 중 70%인 7,000개를 학습 데이터셋으로, 나머지 30%인 3,000개를 검증 데이터셋으로 사용합니다. 먼저, 7,000개의 학습 데이터셋을 사용해 모델을 학습시킵니다. 이후 학습된 모델을 3,000개의 검증 데이터셋에 적용해보며, 모델이 얼마나 잘 예측하는지를 확인합니다. 이때 검증 데이터셋에 대한 모델의 성능이 학습 데이터셋에 대한 성능과 크게 차이가 난다면, 모델이 학습 데이터에 과적합되었다는 신호일 수 있습니다.

 

더욱 복잡한 모델 검증 방법으로는 '교차 검증'이 있습니다. 'K-fold 교차 검증'은 전체 데이터셋을 K개의 부분으로 나눈 다음, 각각의 부분을 한 번씩 검증 데이터셋으로 사용하고 나머지 부분을 학습 데이터셋으로 사용하는 방법입니다. 이 방법을 통해 모델의 성능을 보다 안정적으로 평가할 수 있습니다.

 

이 전 글(https://10yp.tistory.com/75)에서의 예시를 살펴보면

 

머신러닝(Machine Learning) 후반전 - 모델 선택 및 학습 실습

머신러닝 후반전 데이터 스플릿(Data Split) → 모델 선택 및 학습 → 모델 검증 및 하이퍼파라미터 튜닝 → 성능 평가 서론 머신러닝의 세계는 깊이 있고 복잡합니다. 이를 이해하는 데 필요한 핵

10yp.tistory.com

print("1. Linear Classifier, Accuracy for training : %.4f" % accuracy_score(y, pred))
print("2. Logistic Regression, Accuracy for training : %.4f" % accuracy_score(y, pred2))
print("3. Decision Tree, Accuracy for training : %.4f" % accuracy_score(y, pred3))
print("4. Random Forest, Accuracy for training : %.4f" % accuracy_score(y, pred4))

 

해당 부분이 모델을 검증하는 것이라고 볼 수 있습니다.

 

하이퍼 파라미터

 

하이퍼파라미터는 머신러닝 모델의 성능을 조정하는데 사용되는 매개변수입니다. 이 매개변수들은 학습 과정에서 자동으로 학습되는 것이 아니라, 사용자가 직접 설정해주어야 합니다. 이는 모델의 성능에 큰 영향을 미칠 수 있으므로, 적절한 하이퍼파라미터를 선택하는 것이 중요합니다.

 

하이퍼파라미터의 예로는 학습률(learning rate), 에포크(epoch), 배치 크기(batch size) 등이 있습니다.

  - 학습률은 모델이 데이터로부터 학습하는 속도를 조절합니다. 학습률이 너무 높으면 모델이 데이터를 빠르게 학습하지 

    만, 최적의 해를 놓칠 수 있습니다. 반면 학습률이 너무 낮으면 학습 속도가 느려져서 학습 시간이 오래 걸릴 수 있습니        다.

  - 에포크는 전체 데이터셋에 대해 학습을 진행하는 횟수를 의미합니다. 에포크가 많을수록 모델은 데이터로부터 더 많이       학습할 수 있지만, 과적합의 위험이 있습니다.

   - 배치 크기는 한 번에 학습하는 데이터의 양을 의미합니다. 배치 크기가 크면 학습이 빠르지만, 메모리를 많이 사용하게       됩니다. 반면 배치 크기가 작으면 학습이 느려질 수 있지만, 메모리 사용량은 줄어듭니다.

 

이런 하이퍼파라미터들을 적절히 조정하는 것을 '하이퍼파라미터 튜닝'이라고 합니다. 이는 그리드 탐색, 랜덤 탐색, 베이지안 최적화 등 다양한 방법으로 수행될 수 있습니다. 이 과정을 통해 최적의 성능을 내는 모델을 찾을 수 있습니다.

 

각 모델별로 성능을 향상시킬 수 있는 몇 가지 주요 하이퍼파라미터들은 다음과 같습니다:

 

1. SGDClassifier (Stochastic Gradient Descent)

 

clf = SGDClassifier(loss='log', penalty='l1', alpha=0.0001, learning_rate='optimal', eta0=0.0)

 

 

  - `loss`: 손실 함수를 설정합니다. 기본값은 'hinge'로, 선형 SVM을 의미합니다. 'log'를 사용하면 로지스틱 회귀를 수행할       수 있습니다. - `penalty`: 정규화를 설정합니다. 'l2', 'l1', 'elasticnet' 중 선택할 수 있습니다. - `alpha`: 정규화 강도를 설정

     합니다. 값이 클수록 강한 정규화를 의미합니다.

  - `learning_rate` : 학습률 스케줄을 설정할 수 있습니다. 'constant', 'optimal', 'invscaling', 'adaptive' 중 선택할 수 있습니         다.   

  - `eta0` : 초기 학습률을 설정합니다. 기본값은 0.0입니다.

 

2. LogisticRegression

 

clf2 = LogisticRegression(C=0.1, penalty='l2', solver='saga')

  - `C`: 정규화 강도의 역수를 설정합니다. 값이 작을수록 강한 정규화를 의미합니다.

  - `penalty`: 사용할 norm을 설정합니다. 'l1', 'l2', 'none', 'elasticnet' 중에서 선택할 수 있습니다.

  - `solver`: 최적화 문제에 사용할 알고리즘을 설정합니다. 'newton-cg', 'lbfgs', 'liblinear', 'sag', 'saga' 중에서 선택할 수 있       습니다.

 

3. DecisionTreeClassifier

 

clf3 = DecisionTreeClassifier(criterion='gini', max_depth=3, min_samples_split=10, min_samples_leaf=5)

  - `criterion`: 불순도를 측정하는 방법을 설정합니다. 'gini' 또는 'entropy'를 선택할 수 있습니다.

  - `max_depth`: 트리의 최대 깊이를 설정합니다.

  - `min_samples_split`: 노드를 분할하기 위해 필요한 최소 샘플 수를 설정합니다.

  - `min_samples_leaf`: 리프 노드에 필요한 최소 샘플 수를 설정합니다.

  - `max_features`: 최적의 분할을 찾을 때 고려할 피처의 수를 설정합니다.

 

4. RandomForestClassifier

 

clf4 = RandomForestClassifier(n_estimators=100, max_features=10, max_depth=3, min_samples_split=10, min_samples_leaf=5)

  - `n_estimators`: 사용할 트리의 수를 설정합니다.

  - `max_features`: 최적의 분할을 찾을 때 고려할 피처의 수를 설정합니

    다.

  - `max_depth`: 트리의 최대 깊이를 설정합니다.

  - `min_samples_split`: 노드를 분할하기 위해 필요한 최소 샘플 수를 설정합니다.

  - `min_samples_leaf`: 리프 노드에 필요한 최소 샘플 수를 설정합니다.

  - `bootstrap`: 부트스트랩 샘플을 사용할지 여부를 설정합니다. 이러한 하이퍼파라미터들을 잘 조절하면 모델의 성능을

     향상시킬 수 있습니다. 하지만 이는 데이터에 따라 다르며, 최적의 하이퍼파라미터를 찾기 위해서는 Grid Search나

     Random Search와 같은 방법을 사용하여 교차 검증을 수행하는 것이 일반적입니다.

 

결론

 

머신러닝에서 모델을 구축하는 과정은 학습과 검증, 그리고 하이퍼파라미터 튜닝으로 이루어집니다. 학습된 모델이 얼마나 잘 작동하는지 확인하는 검증 과정은 모델이 학습 데이터에 과적합되지 않고, 새로운 데이터에 대해 잘 예측할 수 있는지를 확인하는 중요한 단계입니다. 또한, 모델의 성능을 최적화하기 위해 하이퍼파라미터 튜닝이 필요합니다. 학습률, 에포크 등의 하이퍼파라미터는 모델의 성능에 큰 영향을 미치므로, 이를 적절히 조절하는 것이 중요합니다.

 

머신러닝 모델을 만드는 과정은 복잡하고 까다로울 수 있지만, 그 과정을 통해 우리는 데이터로부터 얻어낸 인사이트를 통해 문제를 해결하는 방법을 배울 수 있습니다. 이 과정을 통해 머신러닝에 대한 이해를 더욱 심화시킬 수 있습니다. 이로써 '머신러닝 후반전 - 모델 검증 및 하이퍼파라미터 튜닝'에 대한 내용을 마무리하겠습니다. 이 글을 통해 머신러닝에 대한 이해가 더욱 깊어졌기를 바랍니다.

 

함께 보면 좋은 글 ↓

https://10yp.tistory.com/100

 

머신러닝(Machine Learning) 실전 모델 검증 및 하이퍼파라미터 튜닝

서론 머신러닝의 여정은 단순히 알고리즘을 실행시키는 것으로 끝나지 않습니다. 이론에서 실제 응용으로 넘어가는 과정에서, 우리는 모델의 학습이라는 기초 위에 검증과 하이퍼파라미터 튜

10yp.tistory.com

https://10yp.tistory.com/32

 

머신러닝(Machine Learning)의 절차와 이해 - 1편

서론 머신러닝(Machine Learning)은 전산을 이용한 빅데이터가 발전하면서 함께 부상하였습니다. 축적되는 데이터를 바탕으로 미래를 예측할 수 있는 모델을 이용하여 다양한 산업에 사용되고 있으

10yp.tistory.com

https://10yp.tistory.com/102

 

머신러닝(Machine Learning) 실전 성능 평가

서론 머신러닝 모델을 개발하는 과정은 마치 예술가가 작품을 완성하는 과정과 비슷합니다. 데이터 스플릿, 모델 선택 및 학습, 모델 검증 및 하이퍼파라미터 튜닝 등은 모두 머신러닝 모델을 '

10yp.tistory.com

 

반응형