1-17 sklearn DecisionTreeClassifier 의 Gini impurity 계산 사례
kr·@codingart·
0.000 HBD1-17 sklearn DecisionTreeClassifier 의 Gini impurity 계산 사례
 DecisionTreeClassifier를 사용하는 머신 러닝은 방법론 차원에서 여타의 머신 러닝 기법들과 비교해 볼 때에 가장 간단하다고 볼 수 있다. 워낙 간단하기 때문에 변호사들이나 검사들이 순진한 증인들을 대상으로 유도 신문할 때 즐겨 쓰는 이유가 아닐까? 하지만 머신 러닝 코드로 구현하기 위해서는 오히려 더욱 어렵게 느껴지는 것은 무슨 이유일까? Setosa, Versicolor, Virginica 각각 50개의 데이터로 구성된 Iris flowers data는 150개 중 70%를 학습 데이터를 사용하여 DecisionTreeClassifier 학습 결과가 위 그림에 나타나 있다. 각 50개로 구성된 합 150개의 70%를 취하면 sample =105 즉 value = [35, 35, 35] 가 된다. 첫 번째 즉 “petal_width(꽃받침 폭) 가 0.75 cm 보다 작은가?“라는 질문을 통해 Setosa를 classification 해 보자. 105개의 petal_width 학습 데이터를 대상으로 if 문에 의해 간단하게 처리 될 수 있다. 우;l 그림을 참조하면 Setosa 는 petal_width 가 0.75 cm 보다 작다는 조건 하나로 깔끔하게 분류가 됨을 알 수 있다. K개의 class 라벨이 있는 샘플들의 Classification 작업에서 Gini impurity는 다음과 같이 정의 된다. 엔트로피에 비해서는 상대적으로 쉽게 계산이 가능하다.  만약 class 즉 샘플의 종류가 3 이라면 K=3이 되며 Gini impurity는 다음과 같이 간략화 된다.  Decision Tree 알고리듬의 특성상 매 단계별 노드에서 binary형 질문을 하지만 현재의 DecisionTreeClassifier에서는 3개의 꽃 종류가 다루어지게 된다. 즉 “petal_width 가 0.75 보다 작은가 아니면 큰가? “ 하지만 105개 샘플 중 이 범위에 들어오는 35개가 Setosa이고(확률 1/3), 35개는 Versicolor이며(확률 1/3), 35개는 Virginica 이다(확률 1/3). 이로부터 Jini impurity를 계산해 보자.  gini impurity 계산과 아울러 1단계 classification 이 완료되면 105개([35,35,35])의 데이터가 True 일 때 35개([35,0,0]) 와 False 일 때의 70개([0,35,35])로 분리된다.  True 일 때의 35개 데이터에 대한 gini impurity를 계산해 보자. 35개 전체가 Setosa 일 확률이 1.0 이고 Versicolor 나 Verginica 일 확률이 0.0 이다.  samples = 70, value - [0. 35, 35] 데이터가 넘어오게 되는 False 일 경우의 Jini impurity를 계산해 보자.  70개의 sample 데이터 중에서 Versicolor를 분류해 내기 위해서 “petal_length 가 4.75cm 보다 작은가?” 라는 질문을 해보자. 이 질문에 따라서 데이터 파일이 값을 조사하여 보니 Vergicolor 35개 중에서 30개가 만족을 하였다. 70개 중에서 petal_length 가 4.75cm 보다 작은가? 질문이 True 인 경우 30개 데이타만이 Versicolor 로 확인이 되었고 나머지 samples=40, value=[0, 5, 35] 가 False가 되었다. 이때의 gini impurity를 계산해 보자. Vergicolor일 확률은 (5/40) 이며 Virginica 일 확률은 (35/40) 이 된다.   이 단계에서 더욱 세부적으로 나머지 Virginica를 찾기 위해 petal_width 가 1.75cm 보다 작은지 조사를 계속해 나간다.  이러한 과정을 되풀이 하다보면 항상 gini impurity 값이 0.0 이 되는 영역은 classification 이 완료된 부분이다. 한편 남은 샘플 중에서 gini impurity 가 0.5 인 경우는 2종류의 샘플들이 여전히 섞여 있는 상태이므로 추가로 Decision Tree 작업을 이어나가야 한다. 아래의 Tree 는 4단계 Decision Tree작업의 결과이지만 아직 약간의 Versicolr 와 Viginica 가 조금 남아 있는 상태이다. 결론적으로 말해서 DecisionTreeClassifier 가 중요하긴 하지만 방법론 상 세부적인 결론을 얻어내기엔 시원찮아 보인다.  
👍 steeming-hot, votes4minnows, marina007, trenz, bukiland, eforucom, lencenayt, utousild, rustenofr, ungangeri, hedor, sulsingus, ayilior, hangundu, sulyi, eresterar, endedisha, uthatende, suvorov1, edonderen, undereda, tethore, nendedor, supu, xyzashu, mehta, minminlou, wony, bramd, anpigon, mmmagazine, passion-fruit, guest123, fortune-master, sisilafamille, krfeed, seapy, sd974201, skan, beoped, wuwurrll,