말랑말랑제리스타일

Decisiontreeclassifier 함수의 파라미터 random_state란? 본문

프로그래밍/파이썬

Decisiontreeclassifier 함수의 파라미터 random_state란?

제리제리 2022. 1. 26. 15:25

파이썬의 사이킷런 라이브러리에서 Decision Tree 즉, 결정트리를 만들기 위해서 Decisiontreeclassifier 함수를 사용하게 됩니다.

이 Decisiontreeclassifier 함수에서 사용할 수 있는 파라미터는 아래와 같은데요.

 

criterion="squared_error", 
splitter="best", 
max_depth=None, 
min_samples_split=2, 
min_samples_leaf=1, 
min_weight_fraction_leaf=0, 
max_features=None, 
random_state=None, 
max_leaf_nodes=None, 
min_impurity_decrease=0, 
ccp_alpha=0

 

Random_state란

다른건 다 이해가 되는데 random_state 이게 이해가 안돼서 한참 찾아봐서 답을 찾았습니다.

주로 검색해서 나오는 소스코드에 random_state = 42 라고 되어있어서 엄청난 의미를 가진 것 같지만 사실 42라는 random_state에 할당된 숫자 자체에 큰 의미는 없습니다. 중요한건 이 random_state를 None으로 두냐 정수를 넣느냐더라구요.

 

random_status가 None인 경우 한번 Decision tree를 생성할 때 1,3,47...번 데이터를 이용했다고 해서 다시 이 Decision tree를 생성할 때 1,3,47...번째 데이터를 이용하지는 않습니다. 또 다른 어떤 난수번째의 데이터를 이용하게 되는거죠.

만약 random_state가 None이면 정말 규칙없는 어떤 데이터를 뽑아서 Decision tree를 생성하게 되지만 random_state에 어떤 값이 있다면 난수 생성에 어떠한 규칙(이건 만든사람 말고는 알 수 없음)을 넣어서 동일한 결과가 나오게 합니다. 예를 들어 1이라는 값을 넣어서 1,3,47,5...번째 데이터를 이용했다면 또다시 1을 넣으면 1,3,47,5...번째 데이터를 사용하게 되는거죠. 

이걸 일반적으로는 random seed라고 합니다.

 

Random Seed

일반적으로 시스템이 난수를 만들 때 말이 난수지 일정한 패턴의 수를 생성합니다.

여기서 인자로 random seed라는걸 넣어서 어떠한 규칙을 만들어주는건데 C에서는 기본적으로 random seed가 정해져있어서 일반적으로 시간을 random seed로 쓰는 반면 파이썬에서는 기본적으로 이 random seed가 없는 경우 완전 랜덤이 되더라구요.

그래서 이 Random Seed라는건 불규칙속에 규칙을 만들어주는 매개변수라고 생각해주시면 됩니다.

 

Random_state를 사용하는 이유

앞에서 설명한걸 이해했다면 이건 바로 아시겠죠.

정해진 결과를 도출하기 위해서입니다. 만약 Random_state를 None으로 두는 경우 Decisiontreeclassifier 함수를 이용해 Decision tree를 생성하면 그때그때 다른 데이터를 이용하기 때문에 결과가 바뀝니다.

그러나 Random_state에 변수를 입력할 경우 특정한 규칙을 갖게 되고 A라는 사람이 random_state=1로 Decision tree를 생성할 때와 B라는 사람이 random_state=1로 Decision tree를 생성할 때의 결과가 동일해지도록 하는거죠.

그러니까 random_state가 0인지 1인지 42인지보다는 같은 변수를 이용해 같은 결과를 도출해내는 데에 큰 의미가 있습니다.

반응형
Comments