(파이썬 머신러닝 완벽가이드 발췌)
결정 트리는 머신러닝 알고리즘 중 직관적으로 이해하기 쉬운 알고리즘입니다.
데이터에 있는 규칙을 학습을 통해 자동으로 찾아내 트리 기반의 분류 규칙을 만드는 것입니다.
일반적으로 규칙을 가장 쉽게 표혀나는 방법은 if/else 기반으로 나타내는 것인데, 쉽게 생각하면 스무고개 게임과 유사하면, 룰 기반의 프로그램에 적용되는 if, else 를 자동으로 찾아내 예측을 위한 규칙을 만드는 알고리즘으로 이해하면 더 쉽게 다가올 것입니다.
따라서 데이터의 어떤 기준으로 바탕으로 규칙을 만들어야 가장 효율적인 분류가 될 것인가가 알고리즘의 성능을 크게 좌우합니다.
규칙노드로 표시된 노드는 규칙조건이 되는 것이고, 리프노드로 표시된 노드는 결정된 클래스 값입니다.
그리고 새로운 규칙조건마다 서브트리가 생성됩니다.
데이터 세트에 피처가 있고, 이러한 피처가 결합해 규칙조건을 만들때마다 규칙노드가 만들어집니다.
하지만 많은 규칙이 있다는 것은 곧 분류를 결정하는 방식이 더욱 복잡해진다는 얘기이고, 이는 곧 과적합으로 이어지기 쉽습니다.
즉, 트리의 깊이가 깊어질 수록 결정트리의 예측성능이 저하될 가능성이 높습니다.
가능한 한 적은 결정노드로 높은예측정확도를 가지려면 데이터를 분류할 때 최대한 많은 데이터 세트가 해당분류에 속할 수있도록, 결정 노드의 규칙이 정해져야합니다.
이를 위해서는 어떻게 트리를 분할할 것인가가 중요한데 최대한 균일한 데이터 세트를 구성할 수 있도록 분할하는 것이 필요합니다.
먼저 균일한 데이터 세트가 어떤것을 의미하는지 조금더 자세히 설명하겠습니다.
C의 경우 모두 검은공으로 구성되므로 데이터가 모두 균일합니다.
B의 경우는 하얀공을 갖고 잇지만, 대부분 검은공으로 이루어져있어, 다음으로 균일도가 높습니다.
A의 경우는 검은 공 못지않게 많은 하얀공을 가지고 있어서 균일도가 제일 낮습니다.
이러한 데이터 세트의 균일도는 데이터를 구분하는데 필요한 정보의 양에 영향을 미칩니다.
가령 눈을 가린 채 데이터 세트 C에서 하나의 데이터를 뽑았을때 데이터에 대한 별다른 정보 없이도 검은공이라고 쉽게 예측할 수 있습니다.
하지만 A의 경우는 상태적으로 혼잡도가 높고 균일도가 낮기 떄문에 같은 조건에서 데이터를 판단하는 데 있어 더 많은 정보가 필요합니다.
결정노든는 정보균일도가 높은 데이터세트를 먼저 선택할수있도록 규칙조건을 만듭니다.
즉 정보균일도가 데이터 세트로 쪼개질 수 있도록 조건을 찾아 서브데이터세트를 만들고, 다시 이 서브데이터 세트에서 균일도가 높은 자식 데이터 세트 쪼개는 방식을 자식트리로 내려가면서 반복하는 방식으로 데이터 값을 예측하게합니다.
이러한 정보의 균일도를 측정하는 대표적인 방법으로는 엔트로피를 이용한 정보이득 지수와 지니 계수가 있습니다.
정보이득:
정보이득이라는 개념은 엔트로피라는 개념을 바탕으로합니다.
엔트로피는 주어진 데이터집합의 혼잡도를 나타냅니다.
서로 다른 값이 섞여 있으면, 엔트로피가 높고, 같은 값이 섞여있으면 엔트로피간 낮습니다.
정보 이득지수는 1에서 엔트로피 지수를 뺀 값입니다.
즉, 1-엔트로피 지수입니다.
결정트리는 이정보이득지수로 분할 기준을 정합니다.
즉, 정보 이득이 높은 속성을 기준으로 분할합니다.
지니계수:
원래 경제학에서 불평등 지수를 나타낼때 사용하는 계수입니다.
0이 가장 평등하고, 1로 갈수록 불평등합니다.
머신러닝에 적용될 때는 의미론적으로 재해석돼 데이터가 다양한 값을 가질수록 평등하며, 특정 값으로 쏠릴 경우에는 불평등한 값이 됩니다.
머신러닝에서는 의미론적으로 해석이 되는데.
다양성이 낮을 수록 균일도가 높다는 의미로서, 1로 갈수록 균일도가 높으므로 지니계수가 높은 속성을 기준으로 분할하는 것입니다.
결정 트리 알고리즘을 사이킷런에서 구현한 DecisionTreeClassifier는 기본으로 지니 계수를 이용해서 데이터 세트를 분할합니다.
결정트리의 일반적인 알고리즘은 데ㅣ터 세트를 분할하는데 가장좋은 조건, 즉 정보이득이나 지나계수가 높은 조건을 찾아서 자식트리노드에 걸쳐반복적으로 분할한 뒤, 데이터가 모두 특정 분류에 속하게 돠면 분할을 멈추고 분류를 결정합니다.
- 특징
결정트리의 가장 큰 장점은 정보의 '균일도'라는 룰을 기반으로 하고 있어서, 알고리즘이 쉽고 직관적이라는 점입니다.
결정트리가 룰이 매우 명확하고, 이에 기반해 어떻게 규칙노드와 리프노드가 만들어지는지 알 수 있고,
시각화로 표현까지 할 수 있습니다.
또한 정보의 균일도만 신경쓰면 되므로 특별한 경우를 제외하고는 각 피처의 스케일링과 정규화 같은 전처리 작업이 필요없습니다.
반면에 결정트리모델의 가장 큰 단점을 과적합으로 정확도가 떨어진다는 점입니다
피처 정보의 균일도에 따른 룰 규칙으로 서브트리를 계속 만들다보면, 피처가 많고 균일도가 다양하게 존재할수록 트리의 깊이가 커지고 복잡해질 수 밖에 없습니다.
모든 데이터 상황을 만족하는 완벽한 규칙은 만들지 못하는 경우가 오히려 더 많음에도 불구하고, 결정트리는 학습데이터 기반 모델의 정확도를 높이기 위해,
계속해서 조건을 추가하면서 트리 깊이가 계속 커지고, 결과적으로 복잡한 학습모델에 이르게됩니다.
복잡한 학습모델은 결국에는 실제 상황(테스트 셋)에 유연하게 대처할 수 없어서 예측성능이 떨어질 수 밖에 없습니다.
차라리 모든 데이터 상황을 만족하는 완벽한 규칙은 만들 수 없다고 먼저 인정하는 것이, 더 나은 성능을 보장할 수 있습니다.
즉, 트리의 크기를 사전에 제한하는 것이 오히려 성능 튜닝에 더 도움이 됩니다.
장점:
쉽다. 직관적이다.
피처 스케일링이나 정규화등의 사전 가공 영향도가 크지 않다.
단점:
과적합으로 알고리즘 성능이 떨어질 수 있다.
이를 극복하기 위해서 트리의 크기를 사전에 제한하는 튜닝이 필요하다.
결정 트리 파라미터
사이킷런은 결정트리 알고리즘을 구현한 DecisionTreeClassifier과 DecisionTreeRegression클래스를 제공한다.
사이킷런의 결정트리 구현은 CART (classification and regression trees) 알고리즘 기반입니다.
CART는 분류뿐만아니라 회귀에서도 사용될 수 있는 트리 알고리즘입니다.
min_samples_split : 노드를 분할하기 위한 최소한의 샘플데이터 수. (과적합 방지용)
min_samples_leaf : 말단 노드가 되기위한 최소한의 샘플 데이터 수. (과적합 방지용, 비대칭 데이터인경우 주의)
max_features : 최적의 분할을 위해 고려할 최대 피처개수. None으로 주면 전체 feature
max_depth : 트리의 최대 깊이를 규정. (과적합 방지용)
max_leaf_nodes : 말단 노드의 개수.
'개발 > ML+ Data Science' 카테고리의 다른 글
최신 머신러닝 논문 보기 (0) | 2019.07.28 |
---|---|
Ensemble(앙상블) 학습이란? (필사) feat. 랜덤포레스트,XGBoost, LightGBM (0) | 2019.07.26 |
KFold 교차검증과 Stratified KFold 차이점. (0) | 2019.07.26 |
Mac에서 Graphviz 설치? (0) | 2019.07.23 |
Kaggle API사용하기 (0) | 2019.07.18 |