inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[개정판] 파이썬 머신러닝 완벽 가이드

교차검증 - K-Fold와 Stratified K-Fold의 이해 - 01

k-fold 작동방식에 관한 질문입니다.

해결된 질문

244

daeun113

작성한 질문수 3

1

dt_clf = DecisionTreeClassifier(random_state=156)

skfold = StratifiedKFold(n_splits=3)
n_iter=0
cv_accuracy=[]

# StratifiedKFold의 split( ) 호출시 반드시 레이블 데이터 셋도 추가 입력 필요  
for train_index, test_index  in skfold.split(features, label):
    # split( )으로 반환된 인덱스를 이용하여 학습용, 검증용 테스트 데이터 추출
    X_train, X_test = features[train_index], features[test_index]
    y_train, y_test = label[train_index], label[test_index]
    
    #학습 및 예측 
    dt_clf.fit(X_train , y_train)    
    pred = dt_clf.predict(X_test)

    # 반복 시 마다 정확도 측정 
    n_iter += 1
    accuracy = np.round(accuracy_score(y_test,pred), 4)
    train_size = X_train.shape[0]
    test_size = X_test.shape[0]
    
    print('\n#{0} 교차 검증 정확도 :{1}, 학습 데이터 크기: {2}, 검증 데이터 크기: {3}'
          .format(n_iter, accuracy, train_size, test_size))
    print('#{0} 검증 세트 인덱스:{1}'.format(n_iter,test_index))
    cv_accuracy.append(accuracy)
    
# 교차 검증별 정확도 및 평균 정확도 계산 
print('\n## 교차 검증별 정확도:', np.round(cv_accuracy, 4))
print('## 평균 검증 정확도:', np.mean(cv_accuracy)) 

 안녕하세요 선생님. k-fold 작동방식에 관한 질문이 있어 글 남깁니다.

 

전체 데이터셋에서 테스트셋을 제외하고, k개의 데이터셋으로 나누어 학습과 검증을 k번 반복한다. 그리고, 교차 검증 최종 평가는 k번의 학습과 검증에서의 평가지표를 평균낸다. 정도로 이해하였습니다.

 

여기서 저의 궁금점은 다음과 같습니다.

  1. k번의 학습과 검증을 반복하면서 가장 좋았던 iteration의 모델을 최종 모델로 가져가는것인지, 아니면 k번의 학습을 통한 모델의 파라미터들을 평균을 내어 최종 모델을 새로 구하는 것인지 궁금합니다.

  2. 최종 평가지표는 k번의 학습과 검증에서의 평가지표 평균이 아닌, 테스트셋에 대한 평가지표가 더 적당하지 않은지 궁금합니다.

  3. 위 코드에서처럼 for문 안에 fit을 통해 모델 학습을 시킬 때, 이전 iteration에서의 모델 학습과는 전혀 연관되지 않게 새로 학습을 시작하는것인지 아니면 이어서 학습하는 것인지 궁금합니다.

     

     

python 머신러닝 통계

답변 1

1

권 철민

안녕하십니까,

  1. k번의 학습과 검증을 반복하면서 가장 좋았던 iteration의 모델을 최종 모델로 가져가는것인지, 아니면 k번의 학습을 통한 모델의 파라미터들을 평균을 내어 최종 모델을 새로 구하는 것인지 궁금합니다.

=> 일반적으로는 K번 평균을 내어서 가장 평균이 높은 모델을 선택합니다.

  1. 최종 평가지표는 k번의 학습과 검증에서의 평가지표 평균이 아닌, 테스트셋에 대한 평가지표가 더 적당하지 않은지 궁금합니다.

=> 네 맞습니다. 최종 평가지표는 테스트 셋 평가 지표입니다. 다만 테스트 세트로 평가이전에 사전 모의 고사 형식으로 평가를 해보는 측면도 있고, 테스트 데이터 자체가 작을 경우에는 오히려 테스트 결과에 신뢰성이 떨어질 수 있다는 측면등을 감안해서 최종 테스트 데이터에서 평가를 하기 전에 Cross validation 기반으로 검증 평가를 하는 것입니다.

  1. 위 코드에서처럼 for문 안에 fit을 통해 모델 학습을 시킬 때, 이전 iteration에서의 모델 학습과는 전혀 연관되지 않게 새로 학습을 시작하는것인지 아니면 이어서 학습하는 것인지 궁금합니다.

     

    => 이전 모델과 전혀 연관되지 않게 새로 학습을 시작합니다.

     

     

     

     

    감사합니다.

     

0

daeun113

모두 이해되었습니다.

답변해주셔서 감사합니다~~

모델 서빙과 관련된 강좌가 출시되는지 질문드립니다.

0

42

2

안녕하세요 열심히 수강중인 학생입니다

0

78

2

정수 인덱싱

0

81

2

넘파이 오류

0

104

2

11강 numpy의 axis 축 질문 드립니다.

0

99

2

Kaggle 에서 Santander customer satisfaction data 를 다운로드 되지가 않습니다.

0

86

2

Feature importances 를 보여주는 barplot 이 그래프로 안보여져요.

0

75

2

타이타닉 csv 파일이 주피터 화면에 보이지 않습니다.

0

79

2

타이타닉 csv 파일이 주피터 화면에 보이지 않습니다.

0

69

2

5강 강의 오류가 있어요.

0

87

1

실무에서 LTV 관련 모델 선택 질문입니다!

0

77

2

14강 강의 듣는중에 궁금한게 있어서 질문합니다~

0

71

3

파이썬 다운그레이 후 사이킷런 재설치

0

124

2

좋은 강의 감사합니다.

0

76

2

scoring 함수 음수값

0

70

2

6번 강의에 사이킷런, 파이썬, 아나콘다 각각 버전 일치 안 시키고 진행해도 강의 따라가 지나요?

0

107

2

분류 평가 정확도 예측

0

83

2

안녕하세요. 강의 들으면서 업무에 적용하고 싶은 수강생입니다.

0

108

1

카카오톡 채널 있나요

0

112

1

혹시 강의에서 사용하시는 ppt 받을 수 있는건가요

0

191

2

pca 스케일링 관련하여 질문드립니다.

0

106

2

주피터 대신 구글 코랩

0

178

2

강의에서 사용하는 pdf or ppt자료는 따로 없는 건가요?

0

149

2

실루엣 스코어..

0

88

2