반응형
/*******************************************************************************************************************
-- Title : [R3.3] 예측분석 - rpart 패키지를 활용한 분류분석(classification)
-- Reference : hrd-net
-- Key word : R 예측 분석 rpart 분류 분석 formula pred 의사결정트리 의사결정나무 decision tree predict
*******************************************************************************************************************/
-- Chart
-- R Script
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 | # ************************************************ # -- rpart 패키지 적용 분류분석 # ************************************************ # ------------------------------ # -- 1. rpart()함수 간단 실습 # ------------------------------ install.packages("rpart") library(rpart) X11() # 별도창 formula = Species ~ . iris.df = rpart(formula, data=iris) iris.df plot(iris.df ) # 트리 프레임 보임 text(iris.df, use.n=T, cex=0.6) # 텍스트 추가 post(iris.df, file="") # <해석> # iris의 Species(꽃의 종류)변수를 분류하는 가장 중요한 변수는 # Petal.Length와 Petal.Width로 나타난다. # ------------------------------ # -- 2. rpart() 응용 실습 # weather.csv를 weather로 읽어서 RainTomorrow가 y변수, Data, RainTody를 # 제외한 나머지 변수가 x변수가 되도록 하여 decision tree를 작성 # ------------------------------ # ************************************************ # -- weather set # Date(측정날짜) MinTemp(최저기온) MaxTemp(최대기온) Rainfall(강수량) # Sunshine(햇빛) WindGustDir(돌풍 방향) WindGustSpeed(돌풍 속도) # WindDir(바람방향) WindSpeed(바람속도) Humidity(습도) Pressure(기압) # Cloud(구름) Temp(온도) RainToday(오늘 비 여부) RainTomorrow(내일 비 여부) # # 날씨에 따라서 비가 내릴지의 여부를 기록한 데이터이다. # 이 데이터를 분석하면 어떤 날씨 조건에 비가 내릴지 또는 내리지 않을지에 # 대한 판단 기준을 분석할 수 있다. # ************************************************ # ------------------------------ # -- 1) 데이터 가져오기 # ------------------------------ weather = read.csv("C:\\RProject\\Rwork\\Part-IV\\weather.csv", header=TRUE) # ------------------------------ # -- 2) 데이터 특성 보기 # ------------------------------ str(weather) # data.frame': 366 obs. of 15 variables: names(weather) # 15개 변수명 head(weather) # ------------------------------ # -- 3) 분류분석 - 의사결정트리 생성 # ------------------------------ weather.df = rpart(RainTomorrow~., data=weather[, c(-1,-14)], cp=0.01) weather.df # cp 속성 값을 높이면 가지 수가 적어지고, 낮추면 가지 수가 많아진다. # cp 기본값은 0.01 # ------------------------------ # -- 4) 분류분석 시각화 # ------------------------------ X11() plot(weather.df) # 트리 프레임 보임 text(weather.df, use.n=T, cex=0.7) # 텍스트 추가 post(weather.df, file="") # 타원제공 - rpart 패키지 제공 # <해설> # 분기조건이 참이면 왼쪽으로 분류되고, 거짓이면 오른쪽으로 분류된다. # ************************************************ # -- weather 데이터 셋을 7:3으로 나누어 weather_train, weather_test로 # 저장한 후 weather_train으로 분류모델을 생성하고, weather_test로 예측하시오. # 비가 올 확률이 50% 이상이면 'Rain', 50% 미만이면 'No Rain'으로 빈도수를 # 출력하시오. # ************************************************ # 조건) y변수 : RainTomorrow, x변수 : Date와 RainToday변수를 제외한 나머지 변수 # 힌트) 분류모델에 대한 예측은 predict()함수 이용 # ------------------------------ # -- (1) 데이터 가져오기 # ------------------------------ weather = read.csv("C:\\RProject\\Rwork\\Part-IV\\weather.csv", header=TRUE) head(weather) weather_df = weather[-c(1, 14)] # 1,14 칼럼 제외 # ------------------------------ # -- (2) 데이터 셈플링 # ------------------------------ idx = sample(1:nrow(weather_df), 0.7*nrow(weather_df)) weater_train = weather_df[idx, ] weater_test = weather_df[-idx, ] # ------------------------------ # -- (3) 분류모델 생성 # ------------------------------ form = RainTomorrow ~ . model = rpart(formula = form, data = weater_train) # ------------------------------ # -- (4) 분류모델 예측 : 검정데이터로 예측 # ------------------------------ pred = predict(model, weater_test) head(pred) cpred = ifelse(pred[,1] >= 0.5, "No Rain", "Rain") # ------------------------------ # -- (5) 비올 확률 빈도수 출력 # ------------------------------ table(cpred) # 88(no) 22(yes) table(cpred, weater_test$RainTomorrow) # cpred No Yes # No Rain 77 11 = missing : 11 # Rain 12 10 = missing : 12 (77+10) / nrow(weater_test) # 80% | cs |
-- Files
반응형