• 카테고리

    질문 & 답변
  • 세부 분야

    딥러닝 · 머신러닝

  • 해결 여부

    미해결

train_test_split 에서 random_state 없는 의미

21.02.16 13:39 작성 조회수 376

0

선생님~

궁금증이 생겼는데요..!

X_train, X_test,y_train, y_test= train_test_split(iris_data.data, iris_data.target, test_size=0.3)

이렇게 random_state없이 하면 

실행될때마다 계속 train데이터셋과 test데이터셋의 샘플링이 다양하게 되잖아요~

그럼 iris라는 하나의 데이터(Bunch객체)이긴 하지만.. 

X_train, X_test,y_train, y_test= train_test_split(iris_data.data, iris_data.target, test_size=0.3) 과

dt_clf.fit(X_train, y_train) 를 몇 번 계속 해주면

샘플링의 경우의 수가 다양하듯이 

학습도 그만큼의 경우의 수에 따라 되는 의미로 

받아들여도 되는건가요..?

학습이 

답변 8

·

답변을 작성해보세요.

1

아, 이게 다양한 데이터 셋이라는게 해당 데이터가 가질 수 있는 보다 풍부한 데이터라는 의미 입니다.

가령 부동산 데이터가 수도권 아파트 데이타가 90%고, 지방에 연립주택등의 데이터가 상대적으로 적게 구비된게 아니라, 가능하면 모든 영역의 데이터를 다 가져서 학습을 하는게 다양한 테스트 환경에서 좋은 성능을 나타낼 수 있다는 의미입니다.

그런데 이걸 동일한 데이터(비슷하게 쪼개진 데이터)를 마지막 데이터로 학습하는건 다양한 데이터와 연관이 없습니다.

하지만 여쭤보시는게 이미 일정 데이터 10000개로  학습한 모델이 있는데, 새로운 데이터 200개가 있을 때 기존의 10000개를 재학습 하지 않고 200개만 재학습할 수 있냐는 의도로 질문하신거라면 좀 다릅니다.

일단 사이킷런은 그렇게 할수가 없습니다. 10200 개로 재 학습해야 합니다. Keras나 Pytorch는 전이 학습 개념을 적용해서 10000개의 학습 모델의 weight를 재 로딩해서 200개만 재 학습할 수 있습니다.

0

freedom07님의 프로필

freedom07

질문자

2021.02.17

아 다양한 데이터셋의 의미가 그런거였군요..! 제가 잘못 이해했었네요..ㅠ!! 

이해 되었습니다..!! 저의 질문을 잘 이해해주시고 답변도 자세히 해주셔서 감사합니다 선생님 ㅠㅠ..!!!

0

freedom07님의 프로필

freedom07

질문자

2021.02.17

아 선생님~

train_test_split(~~)이 부분은 random_state없으면 샘플링이 다양하게 되는 지 궁금했던 부분이고,

(그래서 random_state없이train_test_split(~~) 과 dt_clf.fit(X_train, y_train)를 3번 시행하게 되면 dt_clf에 3가지의 학습이 쌓이는 줄 알았었는데(샘플링이 다르므로).. 
선생님께서 fit을 하게되면 초기화가 되어 마지막만 학습이된다고 하셔서.. 그렇게 이해했습니다.)

그런데,

제가 다양한 데이터셋과 연관짓는 부분은 dt_clf.fit(X_train, y_train)이 부분입니다. 

다양한 데이터셋이 있더라도,

dt_clf.fit(X_train, y_train)에서 마지막의 데이터만 학습이 되면..

다양한 데이터셋과 머신러닝 알고리즘(여기서는 dt_clf)의 연관이 궁금했던 지점입니다..!

저는 다양한데이터셋이 필요하다는 의미가 알고리즘에 그만큼 학습이 쌓여서 그런줄 알았는데..

그게 아니라, 다양한 데이터셋에 따라 성능비교를 하는 게 의미가 있는건지..? 

(다양한 데이터 셋이 머신러닝 알고리즘에서의 중요한 의미가 무엇인지 궁금했던 것입니다.. !)

0

그러면 선생님 제가 조금 이해가 되지 않는 부분이.. 그러면 다양한 데이터셋이 왜 필요한건가요...?ㅠㅠ

=> 앞에 계속 질문하신 부분이랑, 이 질문의 맥락을 제가 잘 이해하지 못했습니다.

다양한 데이터 셋과 train_test_split()을 연결하시게 된 이유가 뭔지요?

0

freedom07님의 프로필

freedom07

질문자

2021.02.17

그러면 선생님 제가 조금 이해가 되지 않는 부분이.. 그러면 다양한 데이터셋이 왜 필요한건가요...?ㅠㅠ 

다양한 데이터셋을 넣어보고 성능평가를 비교해서 마지막으로 최적의 성능이 되는 데이터로 학습시켜서  최종 테스트 데이터를 넣고 예측하는 ,.

즉,..성능평가를 비교하기 위함인가요..?

(저는 머신러닝 알고리즘에 다양한 데이터셋의 학습이 많이 쌓이는 개념으로 잘못 이해를 했던  것 같네요..ㅠ)

0

네, 맞습니다. 마지막 c만 학습이 됩니다.

0

freedom07님의 프로필

freedom07

질문자

2021.02.17

선생님 답변 감사합니다..!

그런데 제가 질문을 헷갈리게 적은 것 같아요..ㅠ

제가 궁금했던 부분은  random_state없이

X_train, X_test,y_train, y_test= train_test_split(iris_data.data, iris_data.target, test_size=0.3)
dt_clf.fit(X_train, y_train)

이 코드들을 3번 수행하하는 것이 

dt_clf에 3번 학습 된 의미 인 것인지가 궁금한 지점입니다..!

그런데 기존 질문 답변을 보니 선생님께서 fit을 할 때마다 초기화 된다고 하셨던 것 같은데..

그렇게 된다면..
또 제가 궁금한 점이
머신러닝이란 것 학습을 시키는 것이고, 그리고 알고리즘에 다양한 데이터셋을 학습시키는 게 중요하다고 들었는데 ..

fit을 할 때마다 초기화가 되면 다양한 데이터셋을 학습을 시킨다 해도.. 

예를 들면,  data_1, data2, data3 총 3 개의 다양한 데이터셋을 순차적으로 학습을 시켜도 3개의 학습이 쌓여지는(?) 느낌이 아니라...
fit을 할 때마다 초기화가 되어버리면, 마지막 c만 학습이 된 것 아닌가요..? 제가 이해가 잘못된 건지.. 
제가 조금 헷갈리네요..ㅠㅠ
답변 부탁드립니다.. ㅠㅠ

0

보통은 거의 비슷하게 학습됩니다. 큰 차이는 없습니다. 다만 데이터 건수가 너무 작으면 운없게도(?) 큰 차이가 날 수도 있습니다.