• 카테고리

    질문 & 답변
  • 세부 분야

    딥러닝 · 머신러닝

  • 해결 여부

    미해결

random_state 지정 문의

20.03.03 14:28 작성 조회수 2.58k

1

train_test_split, DecisionTreeClassifier 등 다양한 코드에서

random_state를 지정해서 사용합니다.

책에서는 실습용으로 같은 결과를 보기 위해 사용하는걸로 이해했는데

실제로 데이터 분석을 진행할때는 설정 없이 하는게 성능에 더 좋을까요? 큰 차이 없을까요? 

답변 4

·

답변을 작성해보세요.

3

안녕하십니까,

train_test_split와 DecisionTreeClassifier에 들어가는 random_state는 의미상으로 서로 살짝 차이가 있습니다만 수행할 때마다 동일한 결과를 도출하게 한다는 측면에서는 적용하는 게 좋습니다. 이는 성능과 무관하게 일반적으로 성능 결과를 Debugging할 때 유리한 점이 있기 때문입니다. 

1. train_test_split 의 경우에 데이터 세트가 적을 경우 random_state를 어떻게 정하느냐에 따라 데이터 세트가 변경될 수 있기 때문에 종종 test 성능 수치가 달라질 수 있습니다. 때때로 성능 평가를 위한 정확한 test 데이터를 뽑아내는 것은 쉬운 일일이 아닙니다. 때문에 교차 검증 수치로 보완하거나 여러개의 테스트 세트를 만드는데 이때마다 다른 random_state를 주어서 평가하는 방법을 적용하곤 합니다.  train_test_split의 경우에는 random_state를 줄거냐 말거냐 보다는 어떻게 테스트 데이타를 정확하게 만들것인가를 좀더 고민이 필요합니다.

하지만 random_state를 적용하지 않는 것 보다는 random_state를 적용하는 것을 권장 드립니다. 특정 random_state로 분리할 경우 테스트 성능이 좋거나 또는 나빠질 수 있지만,  이는 random state의 문제라기 보다는 전체를 대변하는 테스트 데이터 세트를 뽑기 어렵거나/전체 데이터가 너무 작거나 인 경우가 대부분입니다.  특정 random_state에서 성능 수치가 너무 변한다면 여러개의 random_state를 적용하면서 보편적인 테스트 데이터를 선택하는 방법을 권장 드립니다.

2. DecisionTreeClassifier과 같은 estimator에 생성자로 들어가는 random_state는 동일한 학습 결과를 도출한다는 것 외에도 알고리즘의 초기 weight나 최적 파라미터를 선택하는 기법에 이를 적용하게 됩니다. 일반적으로 random_state를 설정하는 것이 좋습니다. 단지 random_state를 이용하여 최적화를 할 경우 overfitting 할 수 있으므로 너무 의존적이 되지 않도록 해야 합니다.

결과적으로 두가지 경우 모두 실전 분석에 random_state를 설정하는 것이 좋다고 생각합니다.

감사합니다.

1

안녕하십니까,

random_state를 지정하기만 하면 됩니다. train_test_split와 DecisionTreeClassifier가 동일한 random_state를 가질 필요는 없습니다.

감사합니다.

0

헬로월드님의 프로필

헬로월드

2020.12.02

안녕하세요

검색해보다가 추가 질문을 드리려고 합니다.

"두가지 경우 모두 실전 분석에 random_state를 설정하는 것이 좋다"라고 하셨는데

train_test_split의 random_state와 DecisionTreeClassifier과 같은 estimator에서의 random_state를 동일하게 설정해야 유의미한 것인가요?

예를들어 train_test_split에서 random_state=7로 지정했으면 DecisionTreeClassifier와 같은 estimator에서도random_state=7로 지정해야 결과가 유의미한 것인지 아니면 전혀 상관 없는지 궁금합니다.

항상 감사합니다.

0

김상화님의 프로필

김상화

질문자

2020.03.05

감사합니다. 

random_state 적용해서 좋은 결과 보도록 하겠습니다:)