인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

뀨구기님의 프로필 이미지
뀨구기

작성한 질문수

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

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

for ~ in kfold.split(): 역할

작성

·

700

0

 

안녕하세요 선생님 학습중에 의문점이 생겨 문의드립니다.

 

우선 KFold(n_splits=5) 로 폴드의 개수를 5개로 설정했기 때문에

shuffle 설정을 안하기 때문에 인덱스 순서로

120개의 피처와 30개의 레이블이 생성된다는 점은 알겠는데,

 

for 반복문을 돌 때 30개의 레이블이 자동으로 각 폴드를 건너뛰는 점이 이해가 잘안되는데 쉽게 설명해주실 수 있을까요..

답변 1

0

권 철민님의 프로필 이미지
권 철민
지식공유자

안녕하십니까, 

음. 120개의 피처와 30개의 레이블이 생기진 않습니다. 

원래 iris 전체 데이터가 150개 입니다.  그래서 5 fold를 하게 되면 150개의 4/5 를 학습 데이터로, 1/5를 검증 데이터로 만듭니다.  그래서 학습 데이터용 피처와 레이블이 각각 120개가 만들고, 검증용 피처와 레이블이 각각 30개가 만들수 있도록 index값을 KFold.split()에서 생성하는 것입니다. 

그러니까, 아래 코드를 보시면 features는 전체가 150개의 numpy ndarray 입니다.  이를 kfold.split(features) 하게 되면 train_index의 120개의 index값이, test_index에 30개의 index값이 할당됩니다. 이를 for loop를 수행하며 5번 반복하면서 index값을 할당하는데, 이때마다 index값을 변경합니다. 

for train_index, test_index  in kfold.split(features): 

    # kfold.split( )으로 반환된 인덱스를 이용하여 학습용, 검증용 테스트 데이터 추출

    X_train, X_test = features[train_index], features[test_index]

    y_train, y_test = label[train_index], label[test_index]

 

즉 5번 수행시마다 120개는 학습용 index가, 30개는 검증용 index가 할당되고, 수행시마다 index의 값은 변경됩니다. 이렇게 할당된 index값을 이용하여 feature와 label ndarray를 access하여 학습용/검증용 feature 데이터 세트, 학습용/검증용 label 데이터 세트를 만들어 낼 수 있습니다. 

 

감사합니다. 

 

뀨구기님의 프로필 이미지
뀨구기

작성한 질문수

질문하기