반응형

/*******************************************************************************************************************
-- 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(114)]                                           # 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

weather.csv



반응형

+ Recent posts