portfolio

[ R ] R과 python을 활용한 데이터 분석 시각화 #3 (1)

yul_S2 2022. 12. 30. 12:04
반응형

 [ 예측기법 / 시각화 ] 

mlbench패키지 내 BostonHousing 데이터셋을 대상으로 예측기법 2개를 적용하여 기법별 결과를 비교하고 시각화하시오. (R과 python 버전으로 모두 실행)

* 종속변수는MEDV 또는CMEDV를사용

 

< R >

#1 데이터 로드

library(mlbench)
data("BostonHousing")
data <- BostonHousing

nrow(data) #506
  • cf) length는 컬럼 개수 확인.
  • nrow(data) 506

 

#2 데이터 분할

v <- 1:nrow(data)
s <- SyncRNG(seed=42)
idx <- s$shuffle(v)[1:round(nrow(data)*0.7)]

idx[1:length(idx)]

trData <- data[idx[1:length(idx)],]
teData <- data[-idx[1:length(idx)],]

nrow(trData)    #354
nrow(teData)   #152
  • nrow 를 통하여 data 분할이 7:3 으로 잘 되었는지 확인

 

 

 

#### 다중회귀분석 ####

#1 모델 생성

model <- lm(medv~.,data=trData)
Coefficients:
(Intercept)                crim                zn            indus           chas1  
  39.068591    -0.119045     0.050035    -0.028064     1.392925  
             nox                rm              age                dis               rad  
 -15.950342     3.370782     0.008640    -1.394768     0.325629  
              tax           ptratio                 b             lstat  
  -0.013416    -0.959687     0.007424    -0.531843  

 

 

#2 다중공선성 문제 확인 , 정확성 

library(car)
vif(model)
        crim             zn          indus           chas            nox               rm              age 
1.723774   2.386830   3.958298   1.075229   4.405680   1.936538     3.030017 
           dis            rad              tax        ptratio               b             lstat 
3.981014   7.352403   8.863571   1.706650   1.325276   2.886946 
  • 모두 10보다 작음, 다중공선성 문제가 없음

 

 

#3 다중회귀분석 결과보기

summary(model)
Residuals:
     Min       1Q   Median       3Q      Max 
-13.1560  -2.7104  -0.4873   2.2125  25.7803 

Coefficients:
                      Estimate   Std. Error   t value     Pr(>|t|)    
(Intercept)  39.068591   5.928838   6.590    1.68e-10 ***
crim            -0.119045   0.036327  -3.277     0.001157 ** 
zn                0.050035   0.016552   3.023     0.002694 ** 
indus          -0.028064   0.073072  -0.384     0.701173    
chas1         1.392925     0.986490   1.412     0.001058 **     
nox           -15.950342   4.699789  -3.394     0.000771 ***
rm              3.370782     0.495827   6.798     4.77e-11 ***
age             0.008640    0.015969   0.541     0.588829    
dis            -1.394768     0.236392  -5.900     8.78e-09 ***
rad             0.325629     0.080511   4.045     6.49e-05 ***
tax            -0.013416     0.004539  -2.956     0.003335 ** 
ptratio      -0.959687     0.155764  -6.161     2.04e-09 ***
b               0.007424     0.003233   2.296     0.022271 *  
lstat          -0.531843    0.060925  -8.729      < 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 4.751 on 340 degrees of freedom
Multiple R-squared:  0.7342, Adjusted R-squared:  0.724 
F-statistic: 72.23 on 13 and 340 DF,  p-value: < 2.2e-16
  • summary 함수를 이용해 변수들의 유의성을 확인 ->  indus, age 변수는 유의성이 적기 때문에 제거

 

#4 변수 선택, 단계적 선택 방법

model2 <- step(model,direction='both')

 

 

#5 상관계수 예측 평가

pred <- predict(model2,teData)
cor(pred, teData$medv)

#  상관계수 예측 0.8660949

예측정확도 의미없음

 

 

#6 시각화

library(dplyr)
library(PerformanceAnalytics)
sd <- select_at(data, vars(medv,rm,lstat,dis,ptratio,nox))
chart.Correlation(sd,histogram=T,pch=20)

 

 

 

#### 랜덤 포레스트 ####

#1 중요 변수를 생성하여 랜덤포레스트 모델 생성

library(randomForest)
RFmodel <- randomForest(medv~.,data=trData,ntree=300,proximity=T)
RFmodel

 

#2 시각화

plot(RFmodel,main="RandomForest Model of BostonHousing")

 

#3 중요 변수 확인

importance(RFmodel)

 

#4 중요 변수 시각화

varImpPlot(RFmodel)

 

 

#5 테스트 데이터로 예측

pred2 <- predict(RFmodel,newdata=teData)

 

#6 테이블 확인

cor(pred2,teData$medv)

# 예측 정확도 0.921513

 

 

반응형