59doit

[ R ] 의사결정나무 #4 rpart패키지 이용 분류분석 본문

통계기반 데이터분석

[ R ] 의사결정나무 #4 rpart패키지 이용 분류분석

yul_S2 2022. 11. 29. 15:34
반응형

2. rpart패키지 이용 분류분석

 

rpart()함수를 이용한 의사결정 트리 생성

rpart()함수  rpart(반응변수 ~ 설명변수, data)

 

#1 패키지 설치 및 로딩

install.packages("rpart")
library(rpart)
install.packages("rpart.plot") 
library(rpart.plot)

 

#2 데이터   로딩 

data(iris)

 

#3 rpart()함수를    이용한    분류분석

rpart_model <- rpart(Species ~ ., data = iris) 
rpart_model
# 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) *

 

#4 분류분석 시각화 

rpart.plot(rpart_model)

 

 

날씨 데이터를 이용하여 비(rain)유무 예측

weather.csv
0.02MB

 

 

 

#1 데이터 가져오기

weather = read.csv("C:/weather.csv", header = TRUE) 
weather

 

#2 데이터   특성   보기

head(weather)
#             Date      MinTemp  MaxTemp   Rainfall   Sunshine  WindGustDir    WindGustSpeed
# 1 2014-11-01     8.0           24.3            0.0         6.3             NW                  30
# 2 2014-11-02    14.0          26.9            3.6         9.7             ENE                 39
# 3 2014-11-03    13.7          23.4            3.6         3.3             NW                  85
# 4 2014-11-04    13.3          15.5           39.8         9.1            NW                  54
# 5 2014-11-05     7.6          16.1            2.8         10.6            SSE                 50
# 6 2014-11-06     6.2          16.9            0.0         8.2              SE                   44
#         WindDir   WindSpeed Humidity   Pressure   Cloud   Temp     RainToday   RainTomorrow
# 1      NW          20                29            1015.0              7   23.6              No              Yes
# 2      W            17                36            1008.4              3    25.7             Yes             Yes
# 3      NNE         6                69             1007.2              7    20.2             Yes             Yes
# 4      W            24                56            1007.0              7    14.1             Yes             Yes
# 5      ESE        28                49            1018.5              7    15.4             Yes              No
# 6      E             24                57            1021.7              5    14.8              No              No

str(weather)
# 'data.frame': 366 obs. of  15 variables:
# $ Date         : chr  "2014-11-01" "2014-11-02" "2014-11-03" "2014-11-04" ...
# $ MinTemp      : num  8 14 13.7 13.3 7.6 6.2 6.1 8.3 8.8 8.4 ...
# $ MaxTemp      : num  24.3 26.9 23.4 15.5 16.1 16.9 18.2 17 19.5 22.8 ...
# $ Rainfall     : num  0 3.6 3.6 39.8 2.8 0 0.2 0 0 16.2 ...
# $ Sunshine     : num  6.3 9.7 3.3 9.1 10.6 8.2 8.4 4.6 4.1 7.7 ...
# $ WindGustDir  : chr  "NW" "ENE" "NW" "NW" ...
# $ WindGustSpeed: int  30 39 85 54 50 44 43 41 48 31 ...
# $ WindDir      : chr  "NW" "W" "NNE" "W" ...
# $ WindSpeed    : int  20 17 6 24 28 24 26 24 17 6 ...
# $ Humidity     : int  29 36 69 56 49 57 47 57 48 32 ...
# $ Pressure     : num  1015 1008 1007 1007 1018 ...
# $ Cloud        : int  7 3 7 7 7 5 6 7 7 1 ...
# $ Temp         : num  23.6 25.7 20.2 14.1 15.4 14.8 17.3 15.5 18.9 21.7 ...
# $ RainToday    : chr  "No" "Yes" "Yes" "Yes" ...
# $ RainTomorrow : chr  "Yes" "Yes" "Yes" "Yes" ...

 

 

#3 분류분석    데이터   가져오기

weather.df <- rpart(RainTomorrow ~ ., data = weather[ , c(-1, -14)], cp = 0.01) 

 

#4 분류분석 시각화

rpart.plot(weather.df)



 

#5 예측치 생성과 코딩 변경 
5-1) 예측치   생성

weather_pred <- predict(weather.df, weather)
weather_pred

 

 

5-1)  y의 범주로 코딩 변환

weather_pred2 <- ifelse(weather_pred[ , 2] >= 0.5, 'Yes', 'No')

 

 

#6 모델    평가

table(weather_pred2, weather$RainTomorrow)
# weather_pred2  No Yes
#                    No  278  13
#                   Yes  22  53

(278 + 53) / nrow(weather)
# 0.9043716

 

반응형
Comments