[ cross validation ]
✅ 모델의 성능을 평가하기 위한 효과적인 방법 중 하나로, 모델의 성능을 정확하게 추정하기 위해 사용.
다음과 같은 종류들이 있다.
- k-fold cross validation
- leave-one-out cross validation
- stratified k-fold cross validation
[ K-Fold ]
✅ 과적합을 막기 위한 방법 중 하나로, 각 다른 학습/검증데이터 셋을 K개 만들고 각 세트에서 학습과 검증을 수행하는 방법
→ 데이터가 적을 때는 K를 크게 하고, 데이터가 많을 때는 k를 작게 하는 것이 일반적. 특히 데이터가 적을 때 유용하다
- K-fold : 위 이미지처럼 앞에서부터 일정한 크기의 test 데이터 정의
- Stratified K-fold : true/false의 비율을 유지하며 test 데이터 정의
- Repeated K-fold : 복원추출을 허용하여 K-fold
- Repeated Stratified K-fold : 복원추출을 허용하고 비율을 유지하는 k -fold
> 예시 코드
# 1) 일반적인 k-fold
from sklearn.model_selection import KFold
# kfold 정의 후 kfold로 치환
kfold = KFold( n_splits = 5, random_state=1234, shuffle=True)
# kfold 확인
kfold
# 2) 비율을 유지하는 strafied k-fold
from sklearn.model_selection import StratifiedKFold
str_kfold = StratifiedKFold( n_splits=5,
random_state=1234,
shuffle=True)
str_kfold
# 3) 복원추출을 사용하는 repeated k-fold
# 데이터의 수가 적을때 fold를 나누면 각 셋마다 데이터가 너무 적어질 수 있다
# 복원추출을 사용해 데이터 수 증가시키기
# 데이터가 많을 땐 굳이 사용하지 않는다
from sklearn.model_selection import RepeatedKFold
rkold = RepeatedKFold( n_splits=5, random_state=1234,
n_repeats=10)
# 4) 비율 유지 & 반복 repeated strafied k-fold
from sklearn.model_selection import RepeatedStratifiedKFold
rskold = RepeatedStratifiedKFold( n_splits=5, random_state=1234,
n_repeats=10 )
[ Grid Search ]
✅ 하이퍼파라미터 공간을 모드 탐색하여 최적의 조합을 찾는 방법
⇒ 많은 계산 비용이 요구되어 더 효율적인 Randomized Grid Search를 더 자주 사용함
Randomized Grid Search
✅ 여러가지 하이퍼파라미터 조합을 랜덤 하게 선택하여 탐색하여 지정된 시간 또는 반복 횟수 후에 최적의 조합 반환
Grid Search, Cross Validation 예시 코드
# 패키지 import
import numpy as np
from sklearn.model_selection import train_test_split, cross_val_score, RandomizedSearchCV
from sklearn.neighbors import KNeighborsClassifier
from scipy.stats import randint
# 데이터 준비
X, y = np.random.randn(100, 10), np.random.randint(0, 2, size=100)
# 훈련셋과 테스트셋으로 데이터를 분리
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# KNN 분류기 객체 생성
knn = KNeighborsClassifier()
# 교차 검증 (Cross Validation)
# 5-fold 교차 검증을 수행하여 정확도를 평가
scores = cross_val_score(knn, X_train, y_train, cv=5)
print("Cross Validation Scores:", scores)
print("Mean CV Score:", np.mean(scores))
# 하이퍼파라미터 그리드 설정
param_grid = {
'n_neighbors': randint(1, 10), # 이웃 수를 1에서 10 사이의 값으로 설정
'weights': ['uniform', 'distance'], # 가중치 설정
'metric': ['euclidean', 'manhattan'] # 거리 측정 방법 설정
}
# 랜덤 그리드 서치(Randomized Grid Search)를 통해 최적의 하이퍼파라미터 탐색
random_search = RandomizedSearchCV(knn, param_distributions=param_grid, n_iter=10, cv=5, random_state=42)
random_search.fit(X_train, y_train)
# 최적의 하이퍼파라미터와 평가 점수 출력
print("Best Hyperparameters:", random_search.best_params_)
print("Best Score:", random_search.best_score_)
# 테스트셋으로 모델 평가
test_score = random_search.score(X_test, y_test)
print("Test Set Score:", test_score)
'대외활동 > [부트캠프] 빅데이터 분석가 과정' 카테고리의 다른 글
[회고] ML 프로젝트 회고 (0) | 2024.06.29 |
---|---|
[ML] 06-2. ML - Optuna (0) | 2024.05.09 |
[Tableau] 05-4. 태블로 기능 3(지도, 대시보드 만들기, 계산된 필드) (0) | 2024.04.19 |
[Tableau] 05-3. 태블로 기능 2(수식 계산, 파이차트와 도넛차트) (0) | 2024.04.17 |
[Tableau] 05-2. 태블로 기능(그룹, 색상필터, 레이블필터, 화면비율 조정) (0) | 2024.04.17 |