[질문] 파이썬 머신러닝 완벽 가이드 교차검증-2 강의내용
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]
제가 이 코드를 이해한 순서대로 써보겠습니다.
kfold.split(features)를 하게 되면 feature값을 k개의 fold로 split 해줌
for문에 의해 train_index, test_index가 그 fold를 순회하면서 인덱스를 받음(?)
이정도까지 이해했는데 제가 이해한바로는 150개의 feature를 5개의 fold로 나누고 f f f f f
그 나눠진 f 하나마다 70% train, 30% test로 다시 나눠지는 걸로 이해했는데 for문을 저렇게쓰면 어떻게 인덱스가 매겨지는지 도무지 이해가 잘 안됩니다...
첫번째 fold에서 21개의 train(0~19), test(20~29) 이렇게 나눠지고
두번째 fold에서 21개의 train(30~49), test(50~59) 이런식으로 된다는건지...
파이썬에 대한 이해부족인 것 같아서 For문에서 변수2개인 상황을 검색해봤는데 그거랑 이거랑은 Kfold 때문에 매치가 잘안되는상황입니다.
답변부탁드립니다!
답변 1
1
안녕하십니까,
먼저 아래 코드에서
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]
kfold.split(features)를 하게 되면 feature값을 k개의 fold로 split 해줌
=>for train_index, test_index in kfold.split(features) 하게 되면 feature 값을 k개의 fold로 split을 한다기 보다는, features 데이터 세트의 index값을 학습과 검증 데이터 세트를 접근할 수 있는 index 값들을 train_index, test_index로 나누어서 분할해 줍니다.
그러니까 features 데이터 세트가 150개의 데이터(레코드)가 있다고 하겠습니다.
이를 배열로 접근하려면 0번 index부터 149번 index까지 150개의 index가 있으면 배열로 접근 할 수 있습니다. 이 접근 할 수 있는 index를 train_index, test_index로 나누어 주는데, 5 fold라고 한다면 train_index에 0, 1, 2, 3, 4, .......... 119 index까지 해서 120개의 index를 반환해 주고, test_index에 120, 121, 122,..... 149 index까지 해서 30개의 index를 반환해 줍니다.
이렇게 반환된 index를 기반으로 아래와 같이 feature 데이터세트를 학습과 검증 데이터 세트로 나눌 수 있습니다.
X_train, X_test = features[train_index], features[test_index]
train_index가 120개의 index값을 가지고 있으므로 features[train_index]는 해당 index위치에 있는 120개의 features 데이터를 가져 올 수 있습니다. 마찬가지로 features[test_index]는 해당 index 위치에 있는 30개의 features 데이터를 가져 올 수 있습니다. 이 부분이 이해가 안되시면,
초반 강의의 넘파이 ndarray 인덱싱(Indexing) 이해 부분을 참조 부탁드립니다.
for문에 의해 train_index, test_index가 그 fold를 순회하면서 인덱스를 받음(?)
=> 1에서 언급한 방식을 K fold로 지정된 횟수만큼 반복하면서 train_index와 test_index값을 번갈아 받으면서 5번 동안 서로 다른 train과 test 데이터 세트를 추출하게 됩니다.
혹 이해가 안되시는 부분이 있으면 다시 글 부탁드립니다.
감사합니다.
0
<사진1>
답변 주신 거 토대로 매치해봤습니다. 120,30 확인했습니다.
<사진2>
<사진3>
저는 <사진2>처럼 인덱스가 교차로 생겨야하는 줄 알았는데 한번에 0~119, 120~149 로 자동으로 나눠지나보네요? 헷갈린 이유가 <사진3> 처럼 for문에 변수가 2개이면 하나는 인덱스, 하나는 값으로 매칭이 돼야 하는데
지금의 코드인
for train_index, test_index in kfold.split(features): 는 뭔가 형태가 둘다 인덱스로 들어가버리니까 자료구조형태가 매치가 안돼서 이해가 안되는 상황이었거든요. 이 부분에 대해서만 해결이 되면 이해가 될 것 같은데 한번 더 설명해주실 수 있을까요?
0
저는 <사진2>처럼 인덱스가 교차로 생겨야하는 줄 알았는데 한번에 0~119, 120~149 로 자동으로 나눠지나보네요?
=> 네, 사진2는 교차에 대한 설명을 쉽게 하기 위해서 예시를 든 것이고, 사진2와 같이 순차적으로 교차되지 않을 수 있습니다. 분명한건 교차적으로 데이터를 만들 수 있습니다.
헷갈린 이유가 <사진3> 처럼 for문에 변수가 2개이면 하나는 인덱스, 하나는 값으로 매칭이 돼야 하는데 지금의 코드인
for train_index, test_index in kfold.split(features): 는 뭔가 형태가 둘다 인덱스로 들어가버리니까 자료구조형태가 매치가 안돼서 이해가 안되는 상황이었거든요.
=> 사진3에서는 enumerate() 구문을 사용하셨는데, 이건 kfold.split()과 동작하는 방식이 다릅니다. enumerate(데이터세트)를 for loop로 적용하면 데이터 index와 데이터 값이 출력이 되지만 kfold.split()는 학습과 검증용 index 세트를 반환하게 됩니다.
모델 서빙과 관련된 강좌가 출시되는지 질문드립니다.
0
29
2
안녕하세요 열심히 수강중인 학생입니다
0
71
2
정수 인덱싱
0
74
2
넘파이 오류
0
90
2
11강 numpy의 axis 축 질문 드립니다.
0
90
2
Kaggle 에서 Santander customer satisfaction data 를 다운로드 되지가 않습니다.
0
82
2
Feature importances 를 보여주는 barplot 이 그래프로 안보여져요.
0
71
2
타이타닉 csv 파일이 주피터 화면에 보이지 않습니다.
0
78
2
타이타닉 csv 파일이 주피터 화면에 보이지 않습니다.
0
65
2
5강 강의 오류가 있어요.
0
86
1
실무에서 LTV 관련 모델 선택 질문입니다!
0
74
2
14강 강의 듣는중에 궁금한게 있어서 질문합니다~
0
70
3
파이썬 다운그레이 후 사이킷런 재설치
0
122
2
좋은 강의 감사합니다.
0
76
2
scoring 함수 음수값
0
68
2
6번 강의에 사이킷런, 파이썬, 아나콘다 각각 버전 일치 안 시키고 진행해도 강의 따라가 지나요?
0
104
2
분류 평가 정확도 예측
0
82
2
안녕하세요. 강의 들으면서 업무에 적용하고 싶은 수강생입니다.
0
100
1
카카오톡 채널 있나요
0
111
1
혹시 강의에서 사용하시는 ppt 받을 수 있는건가요
0
191
2
pca 스케일링 관련하여 질문드립니다.
0
103
2
주피터 대신 구글 코랩
0
176
2
강의에서 사용하는 pdf or ppt자료는 따로 없는 건가요?
0
149
2
실루엣 스코어..
0
88
2





