Decision Tree 실습 - 지니 계수 및 서울 지역 다중 분류 (1)

2022. 1. 19. 16:00AI/ML

이 포스트는 허민석님의 유튜브 머신러닝 내용을 정리한 글입니다. 실습 코드는 도서 나의 첫 머신러닝/딥러닝에서 발췌해왔습니다. 실습 코드와 자료는 링크의 Github에서 볼 수 있습니다

이번 포스트에서는 Decision Tree를 활용해 서울 지역 위치 정보를 데이터로 서울 지역을 강동, 강서, 강남, 강북 네 군집으로 다중 분류해보겠습니다. 이전 Deicision Tree에서 우리는 ID3 알고리즘은 정보 이득(information gain)과 엔트로피(entrophy)를 이용하는 알고리즘임을 알아봤습니다. 반면 사이킷런의 Decision Tree는 CART(classification and regression tree) 타입으로, CART는 트리의 노드마다 특징을 이진 분류(Binary classification)하는 특징이 있어 일반적으로 지니 계수를 사용합니다. 지니 계수는 데이터의 통계적 분산 정도를 표현한 값으로, 다시 말해 데이터 군집의 불순도를 측정하는 지표입니다. 지니 계수가 높을수록 군집 내 데이터들의 속성들이 많이 일치한다는 뜻으로, 순도가 높다고 표현하며 반대로 지니 계수가 낮을수록 순도가 낮습니다. 따라서 CART 알고리즘은 지니 계수가 높은 방향으로 Decision Tree의 노드를 구성합니다. 사진을 보고 보스베이비와 성인 남자를 구분하는 예시를 들어보겠습니다. 다음의 표는 보스베이비와 성인 남자를 구분하기 위한 데이터입니다.

이름 정장을 입었는가? 검은색 머리인가? 레이블
보스베이비 아니오 보스베이비
이상인 아니오 성인 남성
보스베이비 아니오 보스베이비
보스베이비 아니오 보스베이비
권수현 성인 남성
배승준 성인 남성

검은색 머리인지를 먼저 물어본다면, 보스베이비와 성인 남성을 한 번에 분류할 수 있습니다. 반면, 정장을 입었는지를 먼저 물어본다면, 다시 한번 검은색 머리인지를 물어봐야만 두 군집을 정확히 분류할 수 있습니다. 따라서 이번에는 검은색 머리인지를 먼저 물어보는 것이 더 효율적이며, 이처럼 데이터 분류에는 엔트로피를 최소로 하는, 다른 말로는 높은 지니 계수를 갖도록 영향력이 큰 특징을 상위 노드로, 영향력이 작은 특징을 하위 노드로 선택하는 것이 중요합니다. 그렇다면 이제 엔트로피와 정보이득, 지니 계수를 실제로 계산해보겠습니다.

질문 하나만으로 보스베이비를 구분할 수 있습니다!

Entrophy, Information gain

이전 포스트에서 엔트로피와 정보 이득에 대해 자세히 설명하였기 때문에, 짧게 알아보겠습니다. 공식은 다음과 같습니다.

정보 이득과 엔트로피를 구하는 과정
엔트로피를 통해 정보 이득을 구하니, 검은색 머리를 상위 노드 특징으로 하는 것이 효율적임을 알았습니다.

지니 계수(Gini coefficient)

지니 계수를 구하는 과정은 더욱 간단합니다. 지니 계수는 순도와 비례하며, 순도가 높다는 뜻은 한 군집에 모여있는 데이터들의 속성이 많이 일치한다는 뜻임을 생각하며 다음의 과정을 보겠습니다. 먼저 지니 계수를 통해 의사결정 트리의 노드를 결정하는 순서는 다음의 두 단계가 끝입니다.

1. 특징으로 분리된 두 노드의 지니 계수를 구함 (P^2 + Q^2)

2. 특징에 대한 지니 계수를 구함

 

지니 계수로 계산한 효율적인 상위 노드 또한 검은 머리 특징입니다.

지니 계수는 계산과 이해가 쉽다는 장점이 있습니다. 사이킷런을 이용하면 엔트로피나 지니 계수의 수식을 이해하지 않고서도 Decision Tree를 만들 수 있으나, 최적화를 위해서는 수학적인 이해도 꼭 필요합니다. 의사결정 트리는 이해도 쉽고 사용하는 것도 쉽지만 오버피팅되기 쉬운 모델입니다. 웬만해선 모든 특징을 반영하게 되며 따라서 지니 계수를 이용하는 CART 알고리즘을 사용할지, 엔트로피와 정보 이득을 사용하는 ID3 알고리즘을 사용할지를 잘 선택해야 하며 트리의 깊이는 어느 정도로할지 등 다양한 상황을 고려하여 최적의 의사결정 트리 모델을 생성하는 것이 중요합니다. 또한 의사결정 트리는 다중 분류(Multiclass classification)에도 탁월한 성능을 보이는데, 다음 포스트에서는 서울 지역 위치 정보를 데이터로 서울 지역을 강동, 강서, 강남, 강북 네 군집으로 다중 분류하는 모델을 생성해보겠습니다.