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 |
반응형