인공지능/머신러닝

의사결정트리

해피밀세트 2020. 5. 18. 16:09

 

 

의사결정트리

  • 지도학습
  • 해석력이 좋다.(현장에서 많이쓰임) : 어떤컬럼을 먼저 바라봐야 분류가 잘되는지
  • 의사결정규칙(decision rule) 나무구조(tree)  도표화하여 분류와 예측을 수행하는 분석방법이다.

 

활용분야

  • 은행대출 : 도산업체 분류 (예측) 과거의 데이터로부터 도산기업과 도산화지 않은 기업을 찾아내는 방법
  • 카드 발급 대상 : 신용불량자 분류 (예측)
  • 통신 : 이탈고객 (해지자, 번호이동) 분류, 새로운 서비스 대상 고객선정
  • 쇼핑 : direct mailing 대상 고객선정

 

장점

  • 지도학습 (분류, 예측) 데이터마이닝 기법
  • 규칙의 이해가 쉽다,  SQL 같은 DB언어로 표현
  • 적용결과에 의해 IF-THEN 으로 표현되는 규칙이 생성
  • 해석력이 좋다.

 

분류알고리즘(R)

  • C5.0 : 엔트로피 지수(entropy index)

 

C5.0 엔트로피와 정보이득(imformation gain)

목표변수의 데이터들이 혼재되어 있으면 무질서도 엔트로피가 상태가 되는데 입력변수들의 데이터들을 여러 그룹으로 나누는 과정에서 목표변수의 엔트로피를 낮추는 방향으로 진행된다.

이때 목표 변수는 정보이득이 발생하게 되는데 값을 가장 크게 해주는 입력변수를 우선적으로 의사결정나무 상위계층으로 분류한다. (정답을 찾기위해 제일먼저 물어봐야할 컬럼 찾기)

 


 

엔트로피와 정보이득 구하기

 

# 데이터 불러오기

read.csv("C:/data/titanic2020.csv")

 

목표변수 : 생존여부 (Y-생존 / N-사망)

분류를 잘하기 위해 엔트로피값이 가장 높은컬럼을 찾자

 

# 생존여부 엔트로피 구하기

H(생존여부) 엔트로피 (∑-Plog2(P)):

P(생존) = 7/10

P(사망) = 3/10

= - P(생존)log2P(생존) - P(사망)log2P(사망)

= -7/10 * log2(7/10) - 3/10 * log2(3/10)

= 0.8812

 

 

엔트로피 구하기

좌석등급에 대한 엔트로피 구하기
1등급일때 생존여부 구하기

H(생존여부|1) 엔트로피 (∑-Plog2(P))

P(생존|1) = 4/4

P(사망|1) = 0/4

= - P(생존)log2P(생존) - P(사망)log2P(사망)

= -4/4 * log2(4/4) - 0/4 * log2(0/4)

= 0

2등급일때 생존여부 구하기

H(생존여부|2) 엔트로피 (∑-Plog2(P)):

P(생존|2) = 3/6

P(사망|2) = 3/6

= - P(생존|2)log2P(생존|2) - P(사망|2)log2P(사망|2)

= -3/6 * log2(3/6) - 3/6 * log2(3/6)

= 1

등급에 따른 생존여부 구하기

H(생존여부|좌석등급) 엔트로피 (∑-Plog2(P)):

P(1)*P(생존여부|1) + P(2)*P(생존여부|2)

= 4/10*0 + 6/10*1

= 0.6

성별에 대한 엔트로피 구하기
남성일때 생존여부 구하기

H(생존여부|M) 엔트로피 (∑-Plog2(P))

P(생존|M) = 4/7

P(사망|M) = 3/7

= -4/7*log2(4/7) -3/7*log2(3/7)

= 0.98

여성일때 생존여부 구하기

H(생존여부|F) 엔트로피 (∑-Plog2(P))

P(생존|F) = 3/3

P(사망|F) = 0/3

= -3/3*log2(3/3) - 0/3*log2( 0/3)

= 0

성별에 따른 생존여부 구하기

H(생존여부|성별) 엔트로피 (∑-Plog2(P)):

P(M)*P(생존여부|M) + P(F)*P(생존여부|F)

= 7/10*0.98 + 3/10*0

= 0.68

 

 

정보이득 구하기

이전 엔트로피 - 이후 엔트로피

좌석등급의 정보이득

iq(생존여부, 좌석등급)

= H(생존여부) - H(생존여부|좌석등급)

= 0.88 - 0.6

= 0.28

성별의 정보이득

iq(생존여부, 성별)

= H(생존여부) - H(생존여부|좌석등급)

= 0.88 - 0.686

= 0.194

 

!!! 정리 !!!

엔트로피값이 높으면 분류가 되어있는것
엔트로피값이 낮으면 분류가 안되어있는것
분류를 잘하는거 = 정보이득이 높은값 = 컬럼의 엔트로피가 낮은값

데이터의 엔트로피 : 데이터가 무질서하면 엔트로피가 높음 / 질서가 있으면 엔트로피가 낮음

데이터의 엔트로피로 컬럼의 엔트로피를 구함

컬럼의 엔트로피 : 무질서하면 엔트로피가 높음 / 질서가 있으면 엔트로피가 낮음

 

컬럼의 엔트로피로 정보이득 구함

정보이득 : 컬럼의 엔트로피가 높으면 정보이득이 낮음 / 컬럼의 엔트로피가 낮으면 정보이득이 높음

 

,

데이터,컬럼이 무질서하면 엔트로피값이 높고 정보이득이 낮음 (성별)

데이터,컬럼이 질서하면 엔트로피값이 낮고 정보이득이 높음 (좌석등급)

 

 


 

의사결정트리의 노드

정지 규칙:

정지규칙은 더 이상 분리가 일어나지 않고 현재의 마디가 끝마디가 되도록하는 규칙이며 가지치기는 형성된 의사결정나무에서 적절하지 않은 마디를 제거하여 적당한 크기의 부나무(Subtree)구조를가지는 의사결정나무를 최종적인 예측모형으로 선택하는 것이다.

 

 

오버피팅 :

  • 너무 노드가 깊어지면 오분류의 가능성이 생긴다.
  • 훈련 데이터셋은 분류하나 테스트 데이터셋은 분류하지 못함
  • 중간중간 노드를 절단할 필요가 있음   

 

오버피팅을 줄이는 방법 :

  • 데이터 많이 사용하기
  • 중간 노드들을 없애기

 

의사결정트리 구현 (R)

 

# 라이브러리 설치

install.packages("C50")

library(C50)

 

# 목표변수~., data = 사용컬럼
# . : 모든 입력변수(모든 컬럼)

C5.0(생존여부~.,data=titanic)

# summary 확인

model <- C5.0(생존여부~.,data=titanic[,-1])

summary(model)

< summary 해석1 > 

1
개가 에러남
< summary 해석2 >

4개가 N으로 분류되어야 하지만 1개가 오분류가 .
< summary 해석3 >

어떤
컬럼이 설명력 있는지 확인할 있음

# 특정한 열만 사용

model <- C5.0(생존여부~좌석등급+성별,data=titanic[,-1])

summary(model)

# 그림으로 그리기

plot(model)

# 예측하기 : 한번도 경험하지 않은것도 분류 가능

test_data = data.frame("좌석등급"=3, "성별"="F")

predict(object=model,newdata = test_data)

 

반응형