Python/Machine Learning

[Python ML]교차검증(Cross Validation)_k-fold/층화k-fold, 그리드 서치(Grid Search)

sohyunkimmm 2023. 1. 14. 13:00
728x90

*빅데이터 분석

- 훈련 데이터(Train data): 모델을 학습시키는데 들어가는 데이터

- 검증 데이터(Test data): 학습된 모델의 성능을 평가하기 위한 데이터. 모델의 일반화를 판단하는데 사용

(*검증 데이터는 절대로 훈련 데이터를 포함해서는 안됨!)

- Train data : Test data = 8 : 2 (or 7 : 3)

Train data : Test data

 

-과적합(Overfitting)

: 모델이 너무 복잡하여 훈련 데이터(Train)에는 적합하지만 일반화하기 힘든 상황

-부적합(Underfitting)

: 모델이 너무 단순하여 훈련 데이터에서의 성능이 좋지 않아 일반화하기 힘든 상황

과적합, 부적합

 

 

* 기계학습(Machine Learning)

- 학습’?

: 데이터로부터 모형 만들어 나가는

 

1) 지도학습: 인덱스가 있는 것을 주고 인덱스 별로 학습. 이후 인덱스가 없는걸 주었을때 분류해줄 있도록 하는 학습방법

2) 비지도학습: 답을 알려주지 않고 인공지능을 학습시키는 방법

3) 강화학습: 잘풀었냐 못풀었냐에 따라서 당근과 채찍(보상과 패널티); 일종의 피드백

                        (성공경험, 실패경험에 대해 보상과 패널티로 학습시킴)

사진 출처: http://ai4school.org/

 

 

* 교차검증(CV; Cross Validation)

- 목적: 예측값(y) 실제값(y) 차이를 줄여나가는 ; 모델의 성능향상

- 데이터셋을 여러번 반복해서 나누고 여러 모델을 학슴함으로써 주어진 데이터셋에 학습된 알고리즘이 얼마나 잘 일반화되어 있는지 평가하는 방법

- 데이터를 폴드(fold)라는 비슷한 크기의 부분 집합 k로 나누어 각 데이터마다 모델을 학습시켜 정확도를 측정

- k-fold 교차검증: cross_val_score

- 층화 k-fold 교차검증: StratifiedKFold

k-fold 교차검증, 층화 k-fold 교차검증

 

 

*교차검증(Cross Validation) 코딩

1) 패키지 가져오기_sklearn(사이킷런)

- Train, Test데이터 나누기: from sklearn.model_selection import train_test_split

- CV(교차검증): from sklearn.model_selection import cross_val_score

필요 패키지 & 데이터 불러오기

 

2) k-fold 교차검증; cross_val_score

- y = '평균 구매주기' (연속형 데이터)

- K-NN 회귀모형 사용

cross_val_score()

 

3) 층화 k-fold 교차검증; Stratified K-Fold

- y = '이탈여부' (이산형 데이터)

- K-NN 분류모형 사용

- cv = skf

StratifiedKFold()

 


4) 그리드 서치

- 모델의 베스트 성능을 만들어주는 하이퍼 파라미터를 찾는 방법

- 관심 있는 파라미터들을 대상으로 모든 조합을 시도하여 최적의 파라미터를 찾는 방법

- accuracy가 7~80%일 때, '모델이 과적합은 아니다' 라고 해석해 볼 수 있음

홀수 값을 넣었을 때, 최적 하이퍼 파라미터 구해보기
accuracy score구해보기

 

728x90
반응형