본문 바로가기
Programing/R

[R] 결정 트리 함수의 사용 (rpart)

by 구루미94 2021. 11. 30.

1. iris 데이터에 rpart 적용하기

설명 변수: 꽃받침의 길이와 너비, 꽃잎의 길이와 너비

반응 변수: {setosa, versicolor, virginica}의 3개 부류를 가진 Species

r = rpart(Species~., data = iris)

첫 번째 매개변수: '반응 변수 ~ 설명 변수로 정의되는 수식' 형태

iris의 경우 4개의 설명 변수를 모두 사용하므로 수식을 Species~. 형식으로 지정

두 번째 매개변수: iris 데이터를 사용한다는 사실을 알려준다.

 

참고) 반응 변수는 범주형이여야한다. 

만일 범주형이 아니라면 범주형으로 변환한 다음에 사용하거나 rpart(···.,method='class')옵션을 설정해야 한다.

그렇지 않으면 rpart가 분류가 아닌 회귀로 작동한다.

iris 데이터에서는 반응 변수가 factor이므로 그대로 사용한다.

 

printcp(r)

- printcprpart로 찾아낸 결정 트리의 구체적인 내용을 출력해주는 함수이다.

 

2. 결정트리 시각화

par(mfrow = c(1, 1), xpd = NA)
plot(r)
text(r, use.n = TRUE)

3. 훈련 집합 예측

p = predict(r, iris, type = 'class')
table(p, iris$Species)

- predict 함수에서 type = 'class' 옵션을 빼면 type = 'prob'를 기본값으로 가지기 때문에 각 샘플에 대해 확률을 출력한다. 그렇게 되면 샘플의 개수를 셀 수 없어 혼동 행렬을 구성할 수 없다.

 

혼동 행렬: 부류별로 옳은 분류와 잘못된 분류의 상세 내용을 보여줌

 

4. rpart의 옵션 (parms 옵션)

사전 확률: 샘플을 충분히 관찰후 정밀하게 그 비율을 계산한 확률

기본 정확률: 설명 변수가 제공하는 정보를 무시하고 무턱대고 말하는 경우의 정확률

ex. 사전 확률 정보가 없을 때 부류의 확률을 1/N이라고 가정할 수 밖에 없음

 

-> 사전 확률이 있다면 보다 높은 성능을 보장할 수 있음

 

r_prior = rpart(Species~., data = iris, parms = list(prior = c(0.1, 0.1, 0.8)))
plot(r_prior)
text(r_prior, use.n = TRUE)

-> 사전 확률을 주고 구한 결정 트리에서 7개의 노드가 만들어짐을 확인할 수 있다.

- [Sepal.Length >= 5.45?] 라는 질문을 가진 노드의 오른쪽 노드는 versicolor에 6개에 샘플이 도달했음에도

노드의 부류를 virginica로 지정하여 virginica 부류에 보다 많은 가중치를 준다.

virginica의 사전 확률이 높기 때문이다.

 

5. 결정 트리로 예측하기

# 예측
newd = data.frame(Sepal.Length = c(5.11, 7.01, 6.32), Sepal.Width = c(3.51, 3.2, 3.31),
                  Petal.Length = c(1.4, 4.71, 6.02), Petal.Width = c(0.19, 1.4, 2.49))

#출력
print(newd)

predict(r, newdata = newd)

- predict 함수는 3개의 샘플에 대해 세 부류에 속할 확률을 계산

728x90

'Programing > R' 카테고리의 다른 글

[R] 랜덤 포리스트  (0) 2021.12.02
[R] 결정 트리의 해석  (0) 2021.12.01
[R] 결정 트리의 원리  (0) 2021.11.30
[R] 회귀와 분류  (0) 2021.11.30
[R] ggplot2 라이브러리를 이용한 데이터 시각화  (0) 2021.10.22

댓글