머신러닝 모델을 데이터 학습시키고 나서 모델이 얼마나 잘 예측하는지 평가를 해봐야 한다. 가장 기본적으로 쓰이는 방법은 데이터를 train 세트와 test 세트로 분리하는 방법이지만 오늘은 여러가지 장점이 있는 Cross-Validation 방법에 대해 알아보고자 한다.
머신러닝 모델 평가 방법
머신러닝 모델을 만들고 이 모델이 얼마나 잘 예측하는지 알아보는 방법은 테스트 데이터를 주고 예측된 값과 실제 정답이 얼마나 맞는지 비교하면 된다. 그러면 테스트 데이터를 어떻게 준비해야할까? 데이터 전체에 대해 학습을 시키고 데이터 전체에 대해 테스트를 해볼 수 있을 것이다. 하지만 이방법은 이미 해당 데이터에 대해 학습이 된 상태이므로 모델의 퍼포먼스가 높게 나올 수 밖에 없다. 그러면 다른 방법으로는 데이터를 70% 학습 데이터, 30%를 테스트 데이터로 나눠서 사용해볼 수 있다. 이 방법은 가장 기본적으로 많이 사용되는 방식이다. 하지만 이 방법만 사용하기에는 테스트데이터가 너무 작기도 하고, 테스트 데이터가 어떻게 구성되있냐에 따라 모델의 퍼포먼스가 높게 나올수도 너무 낮게 나올수도 있다. 그래서 이런 방법을 해결하고자 사용하는게 Cross-Validation이다.
Cross-Validation이란?
Cross-Validation은 보통 모델을 실제로 사용해볼만한지 결정을 하기 전에 참고가 되는 단계이다. Cross-Validation이란 데이터를 작은 조각으로 나눠서 한조각씩 빼고 남은 데이터에 학습을 시키고 빼놓은 조각 데이터에 테스트를 시켜보는 방식이다. 여러번 반복을 거치면서 빼놓는 조각을 달리하여, 최종적으로 평균 퍼포먼스(accuracy)를 Cross-Validation Accuracy로 계산한다.
Cross-Validation이 중요한 이유?
머신러닝 모델을 만들 때 중요한 것은, 이 모델이 실제 적용이 되었을 때 얼마나 실제 데이터에 대해 예측을 잘 해주는지이다. 이를 만드는 과정에서 최대한 확인해보는 방법은, 다양한 테스트 데이터로 테스트를 해보는 것이다. Cross-Validation은 데이터를 여러조각으로 쪼개어 회차를 반복하면서 결국에는 데이터의 모든 데이터에 대해 테스트를 해보는 것으로 이 모델의 평균적인 퍼포먼스가 어느정도 될지 예측을 해볼 수 있다. 그리고 데이터의 한 부분에 대해서만 학습하고 테스트하는게 아니라 반복을 거치기 때문에 오버피팅(Overfitting)도 예방할 수 있다.
Cross-Validation 종류는?
머신러닝에는 여러가지 방법의 Cross-Validation 종류가 있다.
- K-Fold Cross-Validation
- Stratified K-Fold Cross-Validation
- Leave-One-Out Cross-Validation
- Time-Series Cross-Validation
가장 기본적으로 쓰이는 방식은 K-Fold Cross-Validation이다. 데이터를 K개의 조각으로 나누고 1개는 테스트용으로 K-1개는 학습용으로 쓰는 것이다. 이 과정을 K번 거치면서 매번 테스트용으로 쓸 조각을 바꿔주는 방법이다.
Cross-Validation 코드 예제
다음은 Scikit learn에서 Cross Validation을 하는 코드 예시이다.
import numpy as np
from sklearn.model_selection import KFold
from sklearn.linear_model import LogisticRegression
# Load your data into a numpy array
X = np.array([[1, 2], [3, 4], [5, 6], [7, 8]])
y = np.array([0, 1, 0, 1])
# Create a KFold object
kfold = KFold(n_splits=2)
# Iterate through the folds
for train_index, test_index in kfold.split(X):
X_train, X_test = X[train_index], X[test_index]
y_train, y_test = y[train_index], y[test_index]
# Train your model on the training data
clf = LogisticRegression()
clf.fit(X_train, y_train)
# Evaluate your model on the testing data
accuracy = clf.score(X_test, y_test)
print("Accuracy:", accuracy)
이렇게 머신러닝에서 Cross-Validation을 하는 이유, 개념과 장점, 종류, Scikit learn에서 Cross-Validation하는법 코드 예제까지 다뤄봤다. Cross-Validation은 머신러닝에 있어서 모델을 평가하기위해 가장 기본적인 단계로 기초내용에 대해 잘 알아두는 것이 좋다. (참고 포스팅: Decision Tree 이해하기)
'머신러닝' 카테고리의 다른 글
챗 GPT로 머신러닝 코딩 하기(파이썬) (0) | 2023.02.12 |
---|---|
머신러닝 오버피팅 (Overfitting) 이해하기, 원인과 방지 방법, 언더피팅(underfitting)과 차이점 등 (0) | 2023.02.11 |
머신러닝 딥러닝 AI의 개념 및 차이점 이해하기 (0) | 2023.02.02 |
Classification Decision Tree (결정트리) 개념 - Information gain, impurity, Entropy 이해 (1) | 2023.02.01 |
Reinforcement Learning (강화학습) 이란? (0) | 2023.01.30 |
댓글