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

celestial_님의 프로필 이미지

작성한 질문수

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

학습과 테스트 데이터 세트의 분리

선생님, 질문이 있습니다.

작성

·

159

0

선생님 안녕하세요 

원래 저는 임베디드 개발자인데 요새 선생님 덕분에 재미있게 잘 배우고 있습니다.

다름이 아니오라 x_train y_train X_test y_test

이 인자들의 의미가 각각 잘 들어오지 않습니다..

train_data = iris_data.data

train_data로 predict를 하면 당연히 같은 값으로 예측하니 1이 나오는거까지는 당연히 이해가 되는데

진짜 저거는 구글링 돌려서 참고해도 잘 이해가 되지 않습니다

선생님께서는 모의고사 / 수능 이렇게 비유를 하시는데

저같은 초심자를 위해 조금더 자세히 추가 설명 부탁드려도 될까요? 감사합니다:)  

답변 3

2

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

안녕하십니까,

잘 듣고 계시다니 저도 기분이 좋습니다.

일반적으로 학습 데이터는 모델을 학습 시킬 때 사용합니다.

지도 학습의 경우 학습 데이터는 feature와 target(정답)을 가지고 있습니다.

가령 당뇨병 환자를 예측한다라고 하면 feature는 몸무게, 성별, 콜레스트롤 지수, 나이, 기존 병력 여부등의 특징, 즉 feature를 가지고 있으며, 이들 feature에 따라서 당뇨병인지 아닌지의 정답, 즉 target을 가지게 됩니다.

그래서 머신러닝 알고리즘을 이들 feature와 target을 매핑해 가면서 나름의 패턴을 학습을 하는 것입니다.

그런데 머신러닝이 가지는 태생적인 문제가 있습니다. 바로 모델을 학습 시킨 학습 데이터로는 정답(target)을 매핑해 가면서 패턴을 학습했기 때문에 이 학습 데이터로 예측을 해보라고 하면 굉장히 잘 예측합니다. 모의 고사 문제를 풀고, 본인이 채점해 보면서 답을 알기 때문에 동일한 모의고사 문제를 또 내면 쉽게 답을 찾습니다.

때문에 머신러닝 모델의 성능을 측정할때는 반드시 학습 데이터가 아닌 다른 데이터로 테스트를 해봐야 합니다. 학습 데이터가 아닌 다른 데이터에서도 성능이 좋은 모델이 강건하고 좋은 모델입니다. 따라서 테스트 데이터, 즉 본 고사에서 좋은 성적을 낼 수 있어야 좋은 모델입니다.

이처럼 머신러닝 모델의 데이터 세트는 학습을 위한 학습용 데이터, 테스트를 위한 테스트 데이터가 늘 별도로 필요합니다.

train_test_split()함수는 원본 데이터를 학습용, 테스트용으로 쉽게 나누어 줍니다.

train_test_split()을 호출하면

X_train, X_test, y_train, y_test = train_test_split(iris_data.data, iris_data.target, test_size=0.3) 과 같이 인자로 iris_data.data와 같은 원본 데이터의 feature 데이터세트, iris_data.target과 같은 target 데이터 세트를 입력해 주면

X_train(학습용 feature 데이터 세트), X_test(테스트용 feature 데이터 세트), y_train(학습용 target 데이터 세트), y_test(테스트용 target 데이터 세트)를 나누어서 반환해 줍니다. 보통 변수명에 대문자 X_를 사용하면 feature 데이터 세트라는 의미 입니다. 소문자 y_는 target 데이터 세트라는 의미입니다.

이렇게 분할 한뒤 X_train, y_train으로 모델을 학습 시킵니다. 그리고 모델이 학습이 되면, (즉 모의고사 문제로 실력을 갖췄으면) 테스트용 feature 데이터 세트로 모델이 예측을 하도록 합니다(즉 본고사 문제를 냅니다).

이걸 코드로 구현하면 아래와 같이 구현할 수 있습니다.

dt_clf = DecisionClassifier() # 머신러닝 모델 객체 생성

dt_clf.fit(X_train, y_train) # 학습 feature, 학습 target으로 모델 학습(모의 고사 실행)

preds = dt_clf.predict(X_test) # 테스트 feature로 모델이 예측한 값 반환(본고사 실행). 반환값은 preds에 저장

accuracy_score(y_test, preds) # 테스트 target y_test(즉 본고사 정답)과 preds(즉 모델이 예측한 값)이 얼마나 정확한지 성능 평가

감사합니다.

celestial_님의 프로필 이미지
celestial_
질문자

다시 한번 노트에 차근차근 정리하면서 확실히 깨달았습니다. 이보다 더 자세할 수는 없을 것 같군요. 선생님 감사합니다!!

1

저도 이 부분이 이해가 안 되었었는데 , 자세한 답변과 친절한 설명에 이해가 되었습니다! 감사드립니다 질문자님, 선생님!!

0

저도 이부분이 잠깐 헷갈렸는데, 머신러닝 프로그램을 일종의 수학적인 함수라고 생각하니 헷갈리지 않게 되었습니다. 어떤 x값을 주었을 때 이에 따른 이에 대응하는 하나의 y값을 반환하는 것을 함수라고 하잖아요. 머신러닝에서 이 x값에 해당하는 것이 feature들이고, y값에 해당하는 것이 target인 셈인데, training data set과 test data set을 나눌 때에도 이 본질적인 의미 아래에서 각각을 training / test로 나누는 것이니 feature인 X를 train, test로 나눈 것이 오고, target인 y를 train, test로 나눈 것이 오게 되는 것으로 이해했습니다. 써놓고 나니 너무 당연한 소리 같기는 한데 누군가에게는 도움이 되길 바랍니다.