개요
- 결정트리모델
- 결정트리 모델은 특성을 해석하기 좋다.
- 다른 모델보다 성능이 조금 떨어진다고 하더라도 해석하기가 좋아 많이 쓰인다.
- 물론 샘플에 민감해서 특이구조가 바뀌기 쉽다는 단점도 있는데 그러면 해석도 바뀌게 된다.
- 또 하나의 장점은 회귀나 분류문제에 적용이 가능하다.
- 다음에 배울 앙상블 기법에 기초가 된다.
실습 전 전처리
- 2009년 말에서 2010년 초까지 H1N1 독감관련된 설문조사
1 |
|
1 |
|
사이킷럿 파이프라인(Pipelines)
- 결측치 처리, 스케일링, 모델학습 등 머신러닝 프로세스에서 파이프라인(Pipelines)을 사용하면 중복 코드를 최소화하여 쉽게 연결할 수 있다.
- 여러 ML 모델을 같은 전처리 프로세스에 연결시킬 수 있다.
- 그리드서치(grid search)(?)를 통해 여러 하이퍼파라미터를 쉽게 연결할 수 있다.
- 그리드서치 : 관심 있는 매개변수들을 대상으로 가능한 모든 조합을 시도하여 최적의 매개변수를 찾는 방법
1 |
|
- 이랬던 코드가 파이프라인을 사용하면
1 |
|
- 이렇게 코드가 간결해지고 가독성이 증가한다.
파이프라인에서 모델의 파라미터 등과 같은 정보 확인하는 방식
named_steps
속성을 사용해서 파이프라인의 각 스텝에 접근이 가능하다.- 유사 딕셔너리 객체(dictionary-like object)로 파이프라인 내 과정에 접근 가능하도록 한다.
1 |
|
결정트리(Decision Tree)
- 결정트리모델은 특성들을 기준으로 샘플을 분류해 나가는데 그 형태가 나무의 가지가 뻗어나가는 모습과 비슷해서 결정트리라는 이름을 갖고 있다.
- 특성들의 수치를 가지고 질문을 통해 정답 클래스를 찾아는 과정이다.
- 질문이나 말단의 정답을 노드(node)라 하며 노드를 연결하는 선을 엣지(edge)라 한다.
- 결정트리의 각 노드(node)는 뿌리(root)노드, 중간(internal)노드, 말단(external, leaf, terminal) 노드로 나뉜다.
- 결정트리는 분류와 회귀문제 모두 적용이 가능하다.
- 결정트리는 데이터를 분할해가는 알고리즘이다.
- 분류 과정은 새로운 데이터가 특정 말단 노드에 속한다는 정보를 확인한 뒤 말단노드의 빈도가 가장 높은 범주로 데이터를 분류한다.
- 결정트리는 분류과정을 트리구조로 직관적으로 확인이 가능하다.
- 여러 트리모델을 사용하는 앙상블(ensemble) 기법인 랜덤포레스트(Random Forests)와 그레디언트부스팅트리(Gradint Boosted Trees) 모델을 학습할 때 결정트리가 기초가 된다.
결정트리 학습 알고리즘
- 결정트리를 학습하는 것은 노드를 어떻게 분할하는가에 대한 문제이다.
- 노드 분할 방법에 따라 다른 모양의 트리구조가 만들어지게 될 것이다.
- 결정트리의 비용함수를 정의하고 그것을 최소화 하도록 분할하는 것이 트리모델 학습 알고리즘이 된다.
- 트리학습에 자주 쓰이는 비용함수 중 지니불순도와 엔트로피가 있다.
지니 불순도와 엔트로피
지니 불순도(Gini Impurity or Gini Index)
\[{\displaystyle {I}_{G}(p)=\sum _{i=1}^{J}p_{i}(1-p_{i})=1-\sum _{i=1}^{J}{p_{i}}^{2}}\]- 트리 한 노드의 모든 샘플이 같은 클래스에 속해있을 때 값이 0이 되고 이 때를 순수하다고 말하는데 범주들이 섞여있을수록 이 수치가 커지게 되어있다.
엔트로피(Entropy)
\[{\displaystyle \mathrm {H} (T)=\operatorname {I} _{E}\left(p_{1},p_{2},...,p_{J}\right)=-\sum _{i=1}^{J}{p_{i}\log _{2}p_{i}}}\]- 원래 열역학에서 쓰이는 표현인데 지니 불순도와 같이 한 노드에서 모든 샘플이 같은 클래스일 때 0이 된다.
- 싸이킷런에서 트리모델을 학습할 때 디폴트로 지니 불순도를 많이 쓰지만 따로 엔트로피를 계산하도록 설정할 수 있다.
- 엔트로피가 조금 더 균형잡힌 트리를 만든다고는 하지만 지니 불순도가 계산이 조금 더 빠르기 때문에 디폴트로 지니 불순도를 사용한다.
- 결정트리는 분류과정을 직관적으로 확인할 수 있다.
- 여기서 불순도(impurity) 라는 개념은 여러 범주가 섞여 있는 정도를 이야기한다.
- 예를들어 A, B 두 클래스가 혼합된 데이터가 있을 때 (A, B) 비율이
- (45%, 55%)인 샘플(두 범주 수가 비슷)은 불순도가 높은 것
- (80%, 20%)인 샘플이 있다면 상대적으로 위의 상태보다 불순도가 낮은 것(순수도(purity)는 높음)
- 두 불순도의 차이값을 불순도의 감소값이라고 하는데 이 값을 최대한으로 할 수 있는 특성과 분할점을 선택해서 데이터로 트리구조를 만드는 것이 트리학습 알고리즘이다.
- 지니불순도나 엔트로피는 위의 불순도 개념에서 보면 된다.
- 불순도가 낮은 경우 지니불순도나 엔트로피는 낮은 값을 가지게 된다.
- 노드를 분할하는 시점에서 가장 비용함수를 줄이는 분할특성과 분할지점을 찾아내는 프로세스가 필요하다
- 불순도의 감소정도를 엔트로피를 사용하면 정보획득이라고도 말을 한다. 즉, 불순도 감소가 크면 정보획득이 크다.
- 분할에 사용할 특성이나 분할지점(값)은 타겟변수를 가장 잘 구별해 주는(불순도의 감소가 최대가 되는, 정보획득이 가장 큰)것을 선택한다.
- 정보획득(Information Gain)은 특정한 특성을 사용해 분할했을 때 엔트로피의 감소량을 뜻한다.
- ${\displaystyle IG(T,a)=\mathrm {H} {(T)}-\mathrm {H} {(T \vert a)}}$ = 분할 전 노드 불순도 - 분할 후 자식노드들의 불순도
사이킷런 사용 결정트리 구현
- 파이프라인을 사용하면 위에서 본 코드에서 단wl 분류기만 바꾸어주면 된다.
- 결정트리에서는 StandardScaler는 도움이 되지 않기 때문에 제외하고 학습한다.
- 이유 : 하나의 피쳐에서만 구분을 하기 때문에(?)
1 |
|
- 학습데이터는 99%이상 맞추는데 검증세트의 정확도는 다수범주(0)의 비율과 같게 나온다.
- 확실한 과적함임을 확인할 수 있다. 대부분 0으로 예측했다.
- 다수 범주로 예측하는 모델이 기준모델이라고 보면, 기준모델과 동일한 성능이 나오므로 학습이 잘 되었다고 판단할 수 없다.
만들어진 트리 확인
- 거대한 트리는 한 눈에 관찰하기 어렵기 때문에 depth 제한을 3으로 두고 결정트리를 그린다.
1 |
|
과적합 해결
- 복잡한 트리는 과적합 가능성을 높이기 때문에 복잡도를 낮추어 일반화를 유도한다.
- 트리의 복잡도를 줄이기위해 자주 사용하는 하이퍼파라미터들
- min_samples_split
- min_samples_leaf
- max_depth
1 |
|
특성 중요도(Feature importance)
- 선형모델에서 회귀 계수를 사용하였다면, 결정트리에서는 대신 특성 중요도를 확인한다.
- 회귀계수와 달리 특성중요도는 항상 양수값을 가진다.
- 이 값을 통해 특성이 얼마나 일찍 그리고 자주 분기에 사용되는지 결정된다.
1 |
|
- 결정트리모델은 선형모델과 달리 비선형, 비단조(Non-monotonic), 특성상호작용(Feature interactions) 특징을 가지고 있는 데이터 분석에 용이하다.
- 단조(Monotonic), 비단조(Non-monotonic) 함수(?)
- 단조함수 : 주어진 순서를 보존하는 함수이다. 기하학적으로, 실수 단조 함수의 그래프는 왼쪽에서 오른쪽으로 줄곧 상승하거나 줄곧 하강한다. 대수학적으로, 단조 함수는 두 순서 집합 사이의 준동형이다.
- 특성상호작용
- 특성들끼리 서로 상호작용을 하는 경우를 말한다.
- 회귀분석에서는 서로 상호작용이 높은 특성들이 있으면 개별 계수를 해석하는데 어려움이 있고 학습이 올바르게 되지 않을 수 있다. 하지만 트리모델은 이런 상호작용을 자동으로 걸러내는 특징이 있다.
특성상호작용(Feature Interaction)
- 예제 데이터로 특성상호작용을 만들어 선형회귀모델과 트리모델의 차이를 확인
- 기본가격 : 150,000
- Location : good일 때 +50,000
- Size : big일 때 +100,000
- good and big인 경우 +100,000 규칙 추가(특성상호작용)
1 |
|
선형회귀
1 |
|
회귀트리
1 |
|
데이터에 특성상호작용이 존재하도록 수정
1 |
|
선형회귀
1 |
|
회귀트리
1 |
|
- 트리모델은 선형회귀모델과 달리 특성상호작용에도 문제없이 가격을 예측한다.
결정트리를 비선형 회귀문제에 적용
1 |
|
선형회귀
1 |
|
트리회귀
1 |
|
- max_depth = 1인 경우는 선형회귀 보다 성능이 안 좋아 보이지만 max_depth를 더할 수록 선에 적합이 되어 비선형 데이터를 학습할 수 있음을 시각적으로 확인할 수 있다.