타이타닉 데이터 분석 2.Decision Trees
#rpart 라이브러리를 불러온다
*rpart란 무엇인가?
iris 데이터에는 Species라는 변수가 있다. 이 변수에는 세 가지 종류의 붓꽃이 있다. 이것을 분류해 보는 작업을 다음과 같이 실행해 본다.
result = rpart(Species ~., data=iris)
result
## 결과물
n= 150
node), split, n, loss, yval, (yprob)
* denotes terminal node
1) root 150 100 setosa (0.33333333 0.33333333 0.33333333)
2) Petal.Length< 2.45 50 0 setosa (1.00000000 0.00000000 0.00000000) *
3) Petal.Length>=2.45 100 50 versicolor (0.00000000 0.50000000 0.50000000)
6) Petal.Width< 1.75 54 5 versicolor (0.00000000 0.90740741 0.09259259) *
7) Petal.Width>=1.75 46 1 virginica (0.00000000 0.02173913 0.97826087) *
## 결과물을 해석하면 다음과 같다.
150개의 데이터에는 세 가지 종류의 붓꽃이 1/3씩 존재한다.
(1) 첫번째 기준 : Petal.Length가 2.45보다 작은가?
이 기준에 따라 150개의 데이터는 50개(왼쪽)와 100개(오른쪽)의 데이터로 나뉜다.
왼쪽의 데이터는 조건을 만족하는 경우, 오른쪽은 조건을 만족하지 않는 경우다. 첫번째 기준에 따라 왼쪽으로 분류된 50개의 데이터는 모두 setosa 이었다. 매우 훌륭한 경우다. 하지만 오른쪽에 100개의 데이터에는 virginica와 versicolor의 두 가지 종류의 붓꽃이 섞여있다.
(2) 두 번째 기준 : Petal.Width가 1.75보다 작은가?
이 기준에 따라 작은 경우는 왼쪽으로 54개의 데이터가, 큰 경우는 오른쪽으로 46개의 데이터로 분류되었다. 왼쪽의 54개 데이터 중에서 49개는 virginica 5개는 versicolor로 되어 있고, 오른쪽의 46개 데이터 중에서 45개는 versicolor 44개, virginica 1개로 구성되어 있다.
#Survived에 대해 Pclass Sex Age Sibsp Parch Fare Embarked 변수 별로 정리하여 fit에 넣는다.
fit <- age="" data="train," embarked="" fare="" method="class" parch="" pclass="" rpart="" sex="" sibsp="" span="" urvived="">->
#fit을 보면
fit
n= 891
node), split, n, loss, yval, (yprob)
* denotes terminal node
1) root 891 342 0 (0.61616162 0.38383838)
2) Sex=male 577 109 0 (0.81109185 0.18890815)
4) Age>=6.5 553 93 0 (0.83182640 0.16817360) *
5) Age< 6.5 24 8 1 (0.33333333 0.66666667)
10) SibSp>=2.5 9 1 0 (0.88888889 0.11111111) *
11) SibSp< 2.5 15 0 1 (0.00000000 1.00000000) *
3) Sex=female 314 81 1 (0.25796178 0.74203822)
6) Pclass>=2.5 144 72 0 (0.50000000 0.50000000)
12) Fare>=23.35 27 3 0 (0.88888889 0.11111111) *
13) Fare< 23.35 117 48 1 (0.41025641 0.58974359)
26) Embarked=S 63 31 0 (0.50793651 0.49206349)
52) Fare< 10.825 37 15 0 (0.59459459 0.40540541) *
53) Fare>=10.825 26 10 1 (0.38461538 0.61538462)
106) Fare>=17.6 10 3 0 (0.70000000 0.30000000) *
107) Fare< 17.6 16 3 1 (0.18750000 0.81250000) *
27) Embarked=C,Q 54 16 1 (0.29629630 0.70370370) *
7) Pclass< 2.5 170 9 1 (0.05294118 0.94705882) *
#좌표를 그려본다
plot(fit)
test(fit)
#뭔가 빈약해보이므로 더 세세하고 한 눈에 들어오게 하기 위해 라이브러리들을 불러오고
library(rattle)
library(rpart.plot)
library(RColorBrewer)
#facnyRpartPlot 을 이용해 fit을 다시 보면
fancyRpartPlot(fit)
#의사결정나무를 통해 확률적으로 예측한다
Prediction <- fit="" p="" predict="" test="" type="class">
#데이터프레임으로 만들고 제출한다
submit <- assengerid="test$PassengerId," data.frame="" survived="Prediction)</p">write.csv(submit, file = "myfirstdtree.csv", row.names = FALSE)->->
댓글
댓글 쓰기