59doit
[ R ] 의사결정나무 #4 rpart패키지 이용 분류분석 본문
반응형
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)유무 예측
#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 |
반응형
'통계기반 데이터분석' 카테고리의 다른 글
[ R ] 앙상블 #2 - 랜덤포레스트 예제 (0) | 2022.11.30 |
---|---|
[ R ] 앙상블 #1 - 배깅 & 부스팅 & 랜덤포레스트 (0) | 2022.11.30 |
[ R ] 의사결정나무 조건부 추론나무 #3 예제 (0) | 2022.11.29 |
[ R ] 의사결정나무 #2 (0) | 2022.11.29 |
[ R ] 의사결정나무 #1 (0) | 2022.11.29 |
Comments