데이터 세트 훈련에는 교차 검증이라는 것이 있습니다.
교차검증이란?
**모델의 일반화 성능을 평가하기 위해 데이터셋을 여러 번 나누어 훈련하고 평가하는 방법입니다.
**이를 통해서 모델이 데이터셋의 특정 분할에 의존하지 않고
새로운 데이터에 대해서도 잘 작동할수 있는지 확인할 수 있습니다.
왜 교차 검증을 사용하는지?
교차검증을 사용하는 까닭은 3가지 정도가 있습니다.
1. 일반화 성능 평가: 모델이 훈련 데이터뿐만 아니라 보지 않은 데이터에서도 잘 작동하는지 확인 할수 있어서
2.데이터 활용: 데이터를 최대한 활용하여 훈련과 평가를 반복하므로, 작은 데이터셋에서도 유용해서.
3.편향 및 분산 문제 완화: 데이터를 여러번 나누어 평가함으로써 특정 데이터 분할에 따른 편향을 줄일수 있다.
교차검증에는 2가지가 있습니다.
*1. K-폴드 교차 검증 (K-Fold Cross-Validation)
*
정의 = 데이터를 K개의 폴드로 나누어서, 각 폴드를 한번씩 검증 데이터로 사용하고
나머지 K-1개의 폴드를 훈련데이터로 사용하는 교차 검증 방법입니다.
특징: 단순히 데이터를 K개의 폴드로 나누므로, 각 폴드의 데이터 분포가 원본 데이터 분포와 다를수 있음.
from sklearn.model_selection import KFold
Kfold = KFold(n_splits = 5)
for train_indices, valid_indices in kfold.split(X):
X_train, X_valid = X[train_indices], X[valid_indices]
y_train, y_valid = y[train_indices], y[valid_indices]
2. Stratified K-폴드 교차 검증 (Stratified K-Fold Cross-Validation)
정의 = 데이터를 K개의 폴드로 나누되, 각 폴드가 원본 데이터셋의 클래스 비율을 최대한 유지하도록 하는 교차 검증 방법입니다.
이러한 방법은 특히 클래스 불균형이 있는 데이터셋에서 유용하게 작용됩니다.
특징 = 각 폴드가 원본 데이터의 클래스 비율을 유지하므로, 모델이 모든 클래스에 대해 균형있게 학습 할수 있습니다.
from sklearn.model_selection import StratifiedKFold
strat_kfold = StratifiedKFold(n_splits=5)
for train_indices, valid_indices in strat_kfold.split(X, y):
X_train, X_valid = X[train_indices], X[valid_indices]
y_train, y_valid = y[train_indices], y[valid_indices]
요약:
k-폴드 교차 검증:
1.단순히 k개의 폴드로 나누므로, 각 폴드 클래스 비율이 원본 데이터와 다를수 있음.
2.클래스 불균형이 있는 데이터셋에서는 각 폴드의 클래스 비율이 다를수 있어 모델 평가에 영향 미칠수있음.
3.클래스 비율이 균등한 데이터셋에서 사용하면 적합하다.
Stratified K-폴드 교차 검증:
1.각 폴드가 원본데이터의 클래스 비율을 최대한 유지하도록 나누어짐
2.클래스 불균형이 있는 데이터셋에서도 각 폴드의 클래스 비율을 유지하여 모델이 모든 클래스를 균형있게 학습할수 있게 한다.
3.클래스 불균형이 있는 데이터셋 에서 사용하면 적합하다.
간단한 표차 검증
cross_val_score
*K-Fold클래스를 이용한 교차 검증 방법을 간편화 한 사이킷런의 검증 함수
-- 폴드 세트 추출, 학습/예측, 평가를 한번에 수행할수 있다.
*
교차 검증과 최적 하이퍼 파라미터 튜닝을 한번에
GridSearchCV
사이킷런은 GridSearchCV를 이용해 분류, 회귀 모델 알고리즘에 사용되는 하이퍼 파라미터를
순차적으로 입력하면서 편리하게 파라미터를 도출할 수 있다.
하이퍼 파라미터란?
- 머신러닝의 개별적인 모델에 입력해야 하는 값을 의미
- 즉 모델이 학습하는 값이 아닌 개발자가 직접 넣어줘야 하는 값을 지칭
- 하이퍼 파라미터에 의해 모델의 성능이 조절되기 때문에 모델 알고리즘의 최적 튜닝을 할수 있다.
#모델에 사용할 하이퍼 파라미터 딕셔너리
from sklearn.model_selection import GridSearchCV
parameters = {
"max_depth": [1,2,3],
"min_samples_split": [2,3]
}
grid_dt_clf = GridSearchCV(
DecisionTreeClassifier(),
param_grid = parameters,
return_trrain_score = True,
cv = 3, # 각 하이퍼 파라미터 조합으로 만드는 모델에서 사용할 폴드의 개수
n_jobs =-1 #사용 가능한 CPU코어 개수 지정. -1이면 모든 cpu사용
)
X_train, X_test, y_train, y_test = train_test_split(
X,
y,
test_size = 0.2,
stratify = y,
random_state = 121
)
grid_dt_clf.fit(X_train, y_train)
'한국경제신문(toss bank)' 카테고리의 다른 글
K-Means 군집 (0) | 2024.08.05 |
---|---|
데이터 전처리 ( Preprocessing ) (0) | 2024.08.01 |
데이터 세트 분리, 모델 학습(fit), 예측 수행(predict), 평가(evaluate) (0) | 2024.07.31 |
머신러닝 모델링 프로세스 iris dataset 활용 (0) | 2024.07.31 |
머신러닝 사이킷런 ( sklearn ) (0) | 2024.07.30 |