개발/기계학습

Decision Tree, Gini index

SiJun-Park 2024. 10. 1. 00:00

-Decision Tree: 분류 규칙을 이용하여 데이터를 분류, 회귀하는 지도 학습 모델 중 하나이다.

즉 의사 결정 규칙을 나무 구조로 나타내어 전체 자료를 몇몇 개의 소집단으로 분류하거나 예측을 수

행하는 분석방법이다. 목표 변수가 이산형인 경우의 분류나무와 목표변수가 연속형인 경우 회귀나무

로 구분된다. 장점으로는 결과를 해석하고 이해하기가 쉽고, 자료를 가공할 필요가 거의 없으며 수치

자료와 범주 자료 모두에 적용이 될 수 있고 안정적이다. 대규모의 데이터 set에도 잘 동작을 하지만

단점으로는 각 노드에서의 완전한 최적값을 알아낸다고는 보장을 하지 못한다. 훈련 데이터를 제대로

일반화 하지 못하면 복잡한 트리를 만들 수 있다.

-Gini index: 불순도를 측정하는 지표로서, 데이터의 통계적 분산 정도를 정량화해서 표현한 값이다.

이 Gini index값이 높을수록 데이터의 분산이 되어있음을 나타낸다.

가장 먼저 tictactoe.csv를 불러오면서 마지막 칼럼을 index로 가져왔습니다.

그 후 안에 정보들이 o, x, b, positive, negative가 되어있어 정수로 바꾸어주었습니다.

그 결과로는 b = 0, o = 1, x = 2, positive = 1, negative = 0 이 되었습니다.

라이브러리를 사용하지 않고 순수 작성

각각의 x, o, b를 돌면서 Label을 참고해 positive인 개수를 세주었습니다.

그다음 그 수를 세어둔 걸로 b가 얼마나 뽑히는지, x가 얼마나 뽑히는지, o가 얼마나 뽑히는지를 하였

습니다

이 와 같은 공식을 이용하여 B 같은 경우를 구해본다면 B/전체 * ( 1 B/전체 ) + (B가 아닌 전체/ 전체) *(1 B가 아닌 전체/전체) 를 하여서 B가 전체 중 얼마나 뽑히는지를 계산을 하였습니다.

돌려준 결과는 이렇게 나왔고 여기서 가장 0에 가까운 것은 middlemiddlesquare를 B로 시작할 경우 지니가 0에 수렴한다는 걸 발견하였습니다.

그러면 이 특징을 루트 노드로 정해서 positive인 경우를 세주기 위해

이제 샘플에 대한 positive와 negative 수를 카운트를 한 뒤 결론을 도출 하였습니다.

테스트 전체 케이스에서 나눠준 후 *100을 해준 결과 68.42105%이 나왔습니다.

사용을 할려고한 알고리즘은 cart 알고리즘을 이용하여서 하려고 하였습니다.

Cart 알고리즘은 ID3 알고리즘에 비해 덜 복잡한 알고리즘입니다. 지니 불순도를 이용하여 사용하는

방법이며, 어떤 그룹의 데이터를 두개로 쪼갤 때 불순도를 최대로 낮추는 속성과 해당 속성의 값을

찾아 트리를 만들어 결정 트리를 만드는 방식입니다.

저 같은 경우는 B와 O, X , O와 B, X , X와 O, B로 나누어 계산을 하였었습니다.

하지만 구해진 확률이 뭔가 정답과 다른 것 같어, 얼마나 틀렸을까 궁금하여 싶어

sklearn.tree를 이용해서 예측을 해본 결과는

이렇게 68%가 나오는 걸 확인이 가능했습니다