Posts 의사결정나무(Decision Tree) -1
Post
Cancel

의사결정나무(Decision Tree) -1

1. 머신 러닝이란?

1.1 머신러닝의 교과서적 정의

  • 명시적으로 프로그래밍을 하지 않고 컴퓨터에 학습할 수 있는 능력을 부여여한 학문
  • 과거의 데이터로부터 얻은 경험이 쌓여 감에 따라 주어진 태스크의 성능이 점점 좋아질 때 컴퓨터 프로그램은 경험으로부터 학습한다.
  • Machine이 주어진 데이터를 통해 규칙을 찾는것

2. 의사결정나무(Decision Tree)

2.1 의사결정나무(Decision Tree) 란?

  • 이진분류와 회귀에 모두 사용하능
  • 정답을 알려주는 지도학습 모델
  • 특정 기준에 따라 데이터를 구분하는 모델
  • Node : 특정 기준이나 결과를 담은 네모 상자
  • Root Node : 가장 처음에 있는 노드
  • Terminal Node(leaf Node) : 맨 마지막 노드

2.2 의사결정나무(Decision Tree)의 분할 기준(Split Criterion)

2.2.1 정보 획득(Information Gain)

  • 정보의 가치를 반환하는데 발생하는 사전의 확률이 작을 수록 정보의 가치를 커짐
  • 정보 이득이란 어떤 속성을 선택함으로 인해서 데이터를 더 잘 구분하게 되는것

2.2.2 엔트로피 개념

  • 열역학의 용어로 물질의 열적 상태를 나타내는 물리량 단위중 하나, 무질서의 정도를 나타냄
  • 얼마만큼의 정보를 담고 있는가? 또한, 무질서도를 의미, 불확실성을 나타내기도 함
  • p는 해당 데이터가 해당 클래스에 속할 확률
  • 엔트로피는 이 확률들의 합이다

2.2.3 엔트로피 연습

1
2
# 분할 전 엔트로피
-(10/16) * np.log2(10/16) - 6/16 * np.log2(6/16)
  • 0.95443
1
2
3
# 분할 후 엔트로피
0.5 * (-(7/8) * np.log2(7/8) - 1/8 * np.log2(1/8)) + \
    0.5 * (-(3/8) * np.log2(3/8) - 5/8 * np.log2(5/8))
  • 0.7899
  • 분할 후 엔트로피가 내려갔으니, 분할하는 것이 좋다

2.2.4 지니계수

  • Gine index 혹은 불순도율
  • 1
    2
    
    # 분할 전 지니계수
    1 - (6/16) ** 2 - (10/16) ** 2
    
  • 0.468
    1
    2
    
    # 분할 후 지니계수
    0.5 * (1 - (7/8) ** 2 - (1/8) ** 2) + 0.5 * (1 - (3/8) ** 2 - (5/8) ** 2)
    
  • 0.34375
  • 분할 후 지니계수가 낮으므로, 분할하는 것이 좋다

2.2.5 지니계수 or 엔트로피

  • 어떻게 나눌것인지는 지니계수든, 엔트로피든 알고리즘을 동원해서 코드로 작성
  • 최근에는 Frame Work로 작성하게 됨

3. Scikit Learn

3.1 Scikt Learn이란?

  • 2007년 구글 썸머코드에서 처음구현
  • 현재 파이썬에서 가장 유명한 기계학습 오픈 소스 라이브러리

3.2 Scikit Learn을 이용한 DecsionTree 구현 with iris data

1
2
3
from sklearn.tree import DecisionTreeClassifier
iris_tree = DecisionTreeClassifier()
iris_tree.fit(iris.data[:,2:], iris.target)

3.2 Accuracy 확인

1
2
3
from sklearn.metrics import accuracy_score
y_pred_tr = iris_tree.predict(iris.data[:, 2:])
accuracy_score(iris.target, y_pred_tr)
  • 0.9933333333333333

4. Tree model Visualization

4.1 Graphviz 설치

  • Graphviz install for Mac user
    • brew install graphviz
    • pip install graphviz

4.2 Graphviz 결과

4.3 mlxtend 설치

  • pip install mlxtend

4.4 iris 품종을 분류하는 결정나무 모델이 어떻게 데이터를 분류하였는가?

1
2
3
4
5
from mlxtend.plotting import plot_decision_regions

plt.figure(figsize=(14, 8))
plot_decision_regions(X = iris.data[:, 2:], y = iris.target, clf = iris_tree, legend= 2)
plt.show()

5. 머신러닝의 일반적 절차에 대해서

5.1 Accuracy가 높다고 다 믿을수 있을까?

  • 경계면은 올바른 것일까?
  • 결과는 내가 가진 데이터를 벗어나서 일반화 할수 있을까?
  • 어차피 얻은 데이터는 유한하고 내가 얻은 데이터를 이용하여 일반화를 추구
  • 복잡한 경계면은 모델의 성능을 결국 나쁘게 만듬(과적합)
This post is licensed under CC BY 4.0 by the author.