가장 쉽게 이해하는 랜덤 포레스트 RF (random forests)
먼저 기본 개요는 여러개의 트리를 사용한다는 개념이다.
여러개의 트리가 하나의 숲(포레스트)을 이루는 형태이다.
데이터 부집합의 순차적 분할로 표현할 수 있는데 분류와 회귀예측에 사용할 수 있다.
위의 그림과 같이 의사결정트리를 만드는데 한개가 아니라 여러개를 만드는 것이다. (Bagging)
의사결정 나무는 기계학습에서 널리 사용되는 기법이다. 트리의 특성상 깊게 자랄 수 있어 높은 분별력을 가질 수 있는데 잘못하면 오버핏팅(overfit)이 발생하는 문제점을 가지고 있다.
랜덤 포레스는 여러개의 트리를 생성해서 이러한 오버피팅을 평균화 시켜 오류를 줄이고자 하는 모델이다.
여기서 중요한 것은 랜덤이라는 말이 포레스트가 랜덤하다는게 아니라 트리가 램덤하다는 말이다.
곧 트리를 만들 때 변수들을 사용할 수 있는데 그 변수들을 랜덤하게 선택한다는 것이다.
랜덤하게 만든 트리들에서 나오는 빈도수를 voting하여 결정한다.
그렇다면 트리를 만들때 얼마나 많은 노드를 만들어야 하는가?
그 문제는 지니 계수를 기준으로 할 수 있다.
지니 계수(Gini coefficient, 이탈리아어: coefficiente di Gini)는 오늘날 가장 널리 사용되는, 불균형의 정도를 나타내는 통계학적 지수로, 이탈리아의 통계학자인 코라도 지니(Corrado Gini)가 1912년 발표한 논문 "Variabilità e mutabilità"에 처음 소개되었다. 서로 다른 로렌츠 곡선들이 교차하는 경우 비교하기가 곤란하다는 로렌츠 곡선의 단점을 보완할 수 있다. 지니 계수는 소득 분배의 불평등함 외에도, 부의 편중이나 에너지 소비에 있어서의 불평등함에도 응용된다.
-wikipedia
지니 계수를 쉽게 보면 불순도의 개념이라고 이해할 수 있다.
지니 계수가 0에 가까울 수록 분배가 균등하다고 할 수 있고, 1에 가까울 수록 불균등하다.
만약
노드 M에서 Y=0, 1일때 비율이 각 0.5, 0.5라면 G(M) = 0.5*0.5 = 0.25 가 된다.
이는 50%의 분류로 좋지 않은 분류이다.
만약 노드 N1에서 비율이 0.8, 0.2 라면 G(N1) = 0.8*0.2 = 0.16
노드 N2에서 비율이 0.2, 0.8 라면 G(N2) = 0.2*0.8 = 0.16
가중된 총합계는 0.5*G(N1) + 0.5G(N2) = 0.16으로 노드가 분리될 수록 지니 계수는 감소한다.
노드가 계속 분리됨에 따라 개별 노드의 개체 수가 감소하고 불순도의 감소가 정체된다.
so, 불순도의 감소가 적게 되는경우 해당 노느의 분리를 종결하게 된다.
(종속변수가 연속형인 경우에는 불순도의 측도는 잔체제곱합으로 측정할 수 있다. )
데이터를 정하는 방법에 대해서 보겠다.
OOB (out-of-bag)
관측표본 n개 개체를 n번 복원추출하면 각 개체는 의 확률로 재 표집된다.
대략 63.2%가 선택이 되고 36.8%가 선택이 안된다. 자연스럽게 선택이 된 데이터를 training자료로, 안된 데이터가 test자료가 된다.
OBB의 특징은 모형을 테스트하면 평가지표가 과소편향 되지 않는다는 특징이 있다.
분석표본이 원본표본과 같다.
*정리
OOB를 사용해서 표본에서 중복을 허용하여 같은 크기의 부 표본을 추출하여 training 자료로 하고 나머지 선택되지 않은 개체들은 test 자료로 한다.
training자료를 트리 알고리즘에 넣는데 각 노드에서 대략 랜덤으로 절반정도의 변수만 추출하여 쓰고 나무를 최대한 크게 만든다.
- why? 유사성을 피하기 위해(독립, 다양성 증가), 다른 나무를 만들어 나무를 만들때마다 다른 절반의 변수들이 사용된다. )
앞 단계를 n번 반복해서 산출된 모형을 통합하여 결론을 voting한다.
- 예를 들어 50개의 나무를 만들때, 30대 20으로 만족도가 나온다면(빈도수) -> 1로 판단
곧 데이터가 많은 자료에서 효율적으로 의사결정이 가능하다.
트리를 사용하기 때문에 연산속도가 빠르고 변수를 랜덤으로 하기 때문에 각 변수에 대한 중요도를 낼 수 있다. 곧 지니계수를 얼마나 감소시킨 변수가 있는가를 찾아낸다면 변수의 중요도를 알 수 있다.!!(이게 참좋은거 같다)
* 느낀점
생각보다 쉬운 원리이고, 간단하면서 효율적인 학습인거 같다. 기계학습과 통계학의 만남으로 이루어진 좋은 기법이라고 생각한다.
이미지에서 오브젝트를 추적하거나 리얼타임 물체 인식에 자주 사용된다고 알고 있다.
'IT > [Everyday]Coding' 카테고리의 다른 글
python 선택한 개수 만큼, 일정한 모양으로 출력 연습 (0) | 2016.08.11 |
---|---|
데이터 스트럭쳐 선택 순서도 (1) | 2015.01.08 |
gradient descent 와 stochastic gradient descent 차이 (0) | 2014.12.19 |
딥러닝_Neural Network_backpropagation (0) | 2014.12.19 |
딥러닝_Neural Network_멀티 퍼셉트론 (0) | 2014.12.19 |