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)
- printcp는 rpart로 찾아낸 결정 트리의 구체적인 내용을 출력해주는 함수이다.
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개의 샘플에 대해 세 부류에 속할 확률을 계산
'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 |
댓글