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

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

작성자 없음

작성자 정보가 삭제된 글입니다.

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

5회 기출유형 (작업형2)

검증데이터 분리가 이해가 안가요,,,

해결된 질문

작성

·

386

·

수정됨

0

  • 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!

  • 질문과 관련된 영상 위치를 알려주면 더 빠르게 답변할 수 있어요

  • 먼저 유사한 질문이 있었는지 검색해보세요

 

검증데이터 분리가 이해가 가질 않습니다..

질문 총 4가지 입니다,, 중간중간 제가 이해한 부분이 맞는지(괄호 후 이해가 맞는지 ? 표현들) 체크 부탁드립니다,,

 

1)

***섹션11 예시문제 작업형 2에서

# 검증 데이터 분리

from sklearn.model_selection import train_test_split

X_tr, X_val, y_tr, y_val = train_test_split(X_train,

                                            y_train['gender'],

                                            test_size=0.2,

                                            random_state=2022)

X_tr.shape, X_val.shape, y_tr.shape, y_val.shape


이 작업하기 전에

X_train = X_train.drop(['cust_id'], axis=1)

cust_id = X_test.pop('cust_id')

 이렇게 해서 X_train 안에 cust_id는 삭제하고 X_test의 cust_id는 csv 파일 만들 떄 필요하므로 살려놨는데

 

검증데이터 분리할 때 train_test_split(X_train,

                                            y_train['gender'],

여기서 X_train은 타겟값인 gender가 데이터에 없으므로 drop을 안시켜도 된거고 그렇기 떄문에

X_train이 그대로 들어간 것이고(<<<이게 맞는 이해인가요?)

그리고 뒤쪽에 y_train['gender']은 만약에 y_train데이터 컬럼에 gender가 이미 있으므로 X_train 데이터에 있는 gender를 끌어오지 않고 그대로 사용할 수 있기 떄문에 pop 기능을 안쓰고

y_train['gender']를 그대로 쓴건가요?? (<<< 이게 제대로 이해한건가요?)

 

-- 그리고 여기서 왜 cust_id는 drop을 왜 안시킨 건가요? 밑에 질문 4)에서는 'ID'를 drop하는 작업을 하면서 검증데이터 분리 했는데 여기서는 cust_id를 drop 안시킨 이유가 있는건가요? --- 아 이건 drop 하고 pop 했네요!! 밑에 질문 3) 에서는 ID drop과 pop작업을 왜 안한건지 궁금합니다!

 

 

 

 

 

2)

 5회 기출유형 2에서 수치형 활용 부문에서도

검증데이터 분리하는데

from sklearn.model_selection import train_test_split
X_tr, X_val, y_tr, y_val = train_test_split(train, y_train, test_size=0.2, random_state=2022)

여기서도 그러면 train 데이터 컬럼에는 price가 있고 test 데이터 컬럼에는 price가 없기 떄문에

train 컬럼에 있는 price를 끌어다가 y_train에 저장한 건가요?

근데 그러면 train에서는 price를 drop 하는작업 --> train.drop('price', axis=1) 이걸 안해도 돼서 그대로

train을 쓴 건가요?( << 이게 맞는 이해인건지?)

그러면 뒤쪽에 y_train은 왜 그대로 쓴건가요? 검증데이터 분리 전에 pop 작업해서 y_train에 저장했는데 그러면 검증데이터 분리 뒤쪽에는 y_train['price'] 이렇게 들어가야 맞는거 아닌가요?

 

 

3)

4회 기출유형2에서 마지막 고급단계에서 검증데이터 분리 안한 이유가 있나요?? 강의에서는 라벨인코딩 for문으로 안풀고 다른 방법으로 하셨는데 만약에 라벨인코딩 하고 for문으로 하고나서 검증데이터 분리 하고 fit하고 pred하는 코드를 알 수 있을까요?

4회 기출유형 작업형2에서 검증데이터 분리 안했는데 라벨인코딩 for문까지 하고 그 다음에 검증데이터 분리로 코드 실행한다고 하면

from sklearn.model_selection import train_test_split

X_tr, X_val, y_tr, y_val = train_test_split( ____, ____, test_size=0.1, random_state=2022)

이렇게 한다고 하면 저 빈칸에 들어가는 게 뭔가요?

 

train 컬럼과 test 컬럼에 모두 ID가 있는데 제출 형식이 ID와 Segmentation이기 때문에

둘다 ID drop 작업을 안했던데 그래서 인건가요? 밑에 4) 질문에서는 'ID' drop 작업 했는데 왜 여기서는 같은 ID drop 작업과 pop 작업을 안한건가요? ( << 이게 제가 제대로 이해한건지?)

만약 4) 작업형 모의문제3 처럼 ID도 drop과 pop을 헀고 위에 질문 1)에서도 cust_id도 drop과 pop작업을 헀는데 4회 기출유형2에서는 왜 ID drop작업과 pop 작업을 안한건가요?

train = train.drop('ID', axis=1)

test_id = test.pop('ID') <<< 이 두가지를 해줘야 하는거 아닌가요?

 

그럼 위에 빈칸 고급 단계에서 검증데이터 분리하기 전에

target = train.pop('Segmentation')

test_id = test.pop('ID')

이 두 작업을 실행한 후에

앞에가 타겟데이터를 제외한 값이고 뒤에가 타겟데이터이면

앞에는 train.drop('Segmentation', axis=1), target['Segmentation'] 이 들어가는게 맞나요?

 

4)

작업형2 모의문제3 에서

train 컬럼에는 id와 output이 있고

test 컬럼에는 id는 있지만 output 이 없습니다

제출형식은 id output인데,

검증데이터 분리에서 앞쪽에는 train 컬럼의 output을 drop시켰고, 뒤쪽에는 train데이터의 output을 그대로 썻습니다

여기서는 왜 pop하는 과정을 안거친건지 궁금합니다

target = train.pop('output') 을 검증데이터 분리 하기 전에 실행했다면

검증데이터 분리에서 뒤쪽에는 어떤 값이 들어가야 하나요??

 

train = train.drop('id', axis=1)
test_id = test.pop('id')  # 나중에 id값이 csv파일 만들 때 필요해서 id를 살려주는 작업

test.head()
from sklearn.model_selection import train_test_split
X_tr, X_val, y_tr, y_val = train_test_split(train.drop('output', axis=1), train['output'],
                                            test_size=0.15, random_state=2022)

 

 

답변 1

0

퇴근후딴짓님의 프로필 이미지
퇴근후딴짓
지식공유자

1

X_train과 y_train의 사용: 맞습니다. X_train은 타겟 값인 'gender'를 제외한 모든 피처를 포함하고 있습니다. 따라서 X_train을 train_test_split에 그대로 사용합니다.

y_train['gender']는 타겟 변수를 나타냅니다. y_train에는 'id'와 'gender' 컬럼이 포함되어 있으므로, gender를 직접 지정하여 사용합니다.

train_test_split에서 'cust_id'는 고려할 필요가 없어요. id는 제거 했지만 있어도 무방합니다 (범주형이 아니란 조건 하에서)

 

2

train 데이터셋에 'price' 컬럼(타겟)을 분리해야 합니다.
train.drop('price', axis=1)을 사용하여 'price'를 제외한 데이터를 피처로 사용하고, y_train을 타겟 변수로 사용합니다.

이 때 y_train은 'price'만을 포함하고 있어 train_test_split에서 y_train을 그대로 사용할 수 있습니다

 

3

X_tr, X_val, y_tr, y_val = train_test_split( _, ___ㄴ_, test_size=0.1, random_state=2022)

은 ㄱ. 타겟을 제외한 train, ㄴ은 타겟을 넣어 주면 됩니다.

target = train.pop('Segmentation')을 했다면 컬럼이 1개 밖에 없기 때문에 target['Segmentation'] 보단 target로 입력하면 됩니다.

 

4

다양한 방식으로 사용하는 것을 보여주고자 했어요!

3에서도 이야기 했지만 train_test_split( ,ㄴ, test_size=0.1, random_state=2022)에서

ㄱ는 타겟을 제외한 피처이고, ㄴ은 타겟입니다. ㄱ, ㄴ을 넣는 방법은 어떤 방법으로 사용하셔도 됩니다.

편한 방법을 선택해서 사용해주세요!

 

강사님 상세한 설명 감사합니다.

결국에는

1) train 데이터에 타겟이 있을 때

2) train 데이터에 타겟이 없을 때

test 데이터에는 항상 타겟이 없으므로 두가지 경우로

로 나눠지겠네요!

그러면

1) train 데이터에 타겟이 있을 때는

ㄱ 부분에 train.drop('price', axis=1)과 같이 쓰면 되고 ㄴ에는 검증데이터 분리하기 전에 target = train.pop('타겟') 으로 train데이터에서 끌어다 써서 따로 target으로 지정해주게 되면

ㄴ에는 target만 들어가면 되는것이고 혹은 검증데이터 분리 전에 타겟을 pop하는 과정을 안했다면

ㄴ 부분에 train['price'] 와 같이 들어가는 것인거죠?

 

이해가 안가는 질문)

from sklearn.model_selection import train_test_split

X_tr, X_val, y_tr, y_val = train_test_split(train.drop('price', axis=1), train['price'],

그런데 작업형 2 모의문2(회귀) 강의에서 ㄱ에는 train.drop('price', axis=1), ㄴ에는 train['price']를 썼는데,,

이미 ㄱ에서 price를 드랍시켰는데 뒤에 다시 train에서 price컬럼을 쓸수가 있나요,,??

 

2) train 데이터에 타겟이 없을 때는( 이럴땐 3개의 파일이 주어질 것으로 예상됨) -- X_train, y_train, X_test 와 같이

train_test_split(ㄱ,ㄴ, test_size=0.1 ~ )에서

ㄱ 부분에는 train 그대로 쓰면 되고 ( 검증데이터 분리 전에 train.pop('~~') 작업 안해도됨)

ㄴ 부분에는 그러면 다른 훈련데이터에 타겟값이 있을 것이므로 y_train['Segmentation']과 같이 컬럼을 지정해주게 되겠네요!

 

그리고 범주형 데이터가 아니란 조건 하에서는 train에 있는 id를 drop하는 작업

train = train.drop('ID', axis=1) 이런 작업은 해도되고 안해도 되는것이고

test 데이터에 ID는 pop한 후에 따로 cust_id와 같이 저장해둬야겠네요(이건 필수사항, 왜냐하면 csv파일 만들 때 필요) ---> cust_id = test.pop('ID') 과 같이!

 

위에 답변 단 내용 중에서 이해가 잘못된 게 있을까요?

 

퇴근후딴짓님의 프로필 이미지
퇴근후딴짓
지식공유자

1 train.drop('price', axis=1)의 결과는 price컬럼을 제외한 결과를 반환합니다. 단 train에 저장된 것은 아니에요! 따라서 그대로 남아 있습니다.

 

2 네 그런데 id를 저장하는 것이 꼭 필수는 아니고 문제에서 요구했다면 필수 입니다.

최근 5, 6회에서는 id를 csv에 포함하지 않고 있어요:)

 

응원합니다.

작성자 없음

작성자 정보가 삭제된 글입니다.

질문하기