• 카테고리

    질문 & 답변
  • 세부 분야

    딥러닝 · 머신러닝

  • 해결 여부

    미해결

kfold 교차검증 수행

22.10.13 11:37 작성 조회수 171

0

in enumerate 부분에서 이 코딩 부분이 어떻게 작동되는지 조금 더 자세하게 알려주실 수 있나요?

답변 1

답변을 작성해보세요.

0

안녕하십니까,

정확하게 영상의 어느 부분인지는 모르겠지만, 추측컨데

for iter_count, (train_index, test_index) in enumerate(kfold.split(X_titanic_df) 로 간주하고 말씀 드리겠습니다.

먼저 python 문법에서 for 문을 사용할 때 enumerate를 같이 사용하는 경우가 있습니다.

만약 enumerate없이 for 문을 사용한다면 for i in range(30, 100) 으로 하면 30부터 99까지의 값을 차례로 i로 할당합니다.

근데 여기에 enumerate를 적용해서 for index, i in enumerate(range(30, 100)) 으로 하면 enumerate를 통해 loop 수행 시 loop가 수행된 횟수가 맨처음으로 반환되고, 그다음에 for loop 값이 반환됩니다.

그러니까, range(30, 100) 이면 30부터 99까지 70회의 loop를 수행하되 i값은 원래대로 30부터 99까지의 값을 가지게 되나 index값은 0부터 69까지 loop가 반복된 건수를 순차적으로 가지게 됩니다.

만약

for index, i in enumerate(range(30, 100)):

print(index, i)

 

일 경우 출력은

0, 30

1, 31

.....

69, 99

가 됩니다.

아래와 같이 for 문에 enumerate가 없을 경우에는 X_titanic_df를 Kfold로 지정된 건수만큼 학습과 검증 데이터 세트로 split 해서 해당 데이터값을 액세스 할수 있는 index값을 반환합니다.

for train_index, test_index in kfold.split(X_titanic_df)

여기서 중요한 것은 학습과 검즘 데이터 세트를 반환하는 게 아니라 학습과 검증 데이터 세트를 액세스 할 수 있는 index값을 반환하는 것입니다. 이후에 해당 index를 이용해서 학습과 검증 데이터 세트를 가져오는 것입니다.

만약 KFold의 n_split를 5번으로 했다면 위의 for loop는 5번 수행되고 수행 될 때마다 서로 다른 index값을 추출하게 됩니다.

그리고 여기에 enumerate를 for 문에 추가하게 되면

for iter_count, (train_index, test_index) in enumerate(kfold.split(X_titanic_df))

5번 loop를 돌때마다 iter_count에 0, 1, 2, 3, 4와 같은 값이 추가되고 train_index, test_index는 기존 for loop와 동일한 값을 가지게 됩니다.

 

어떤 부분이 이해가 안되시는지 적어주시지 않아서 해당 로직을 다 설명드렸습니다. 원하시는 답변이 아니시면 구체적으로 어떤 부분이 이해가 안되는지 다시 적어 주십시요.

 

감사합니다.