-
R 기초 27 - 로지스틱 회귀분석(Logistic Regression) 예제R 2022. 10. 27. 12:24
날씨 정보를 예측한다.
# Logistic regression으로 비 유무 예측하기 weather <- read.csv("https://raw.githubusercontent.com/pykwon/Test-datas-for-R/master/weather.csv") head(weather, 3) dim(weather) str(weather) colnames(weather) weather_df <- weather[, c(-1, -6, -8, -14)] dim(weather_df) head(weather_df, 3) unique(weather_df$RainTomorrow) sum(is.na(weather_df)) # 5개의 결측값이 있다. weather_df <- na.omit(weather_df) # 결측값을 없애버렸다. # Raintomorrow 변수를 더미변수로 변환 weather_df$RainTomorrow[weather_df$RainTomorrow == 'Yes'] <- 1 weather_df$RainTomorrow[weather_df$RainTomorrow == 'No'] <- 0 unique(weather_df$RainTomorrow) weather_df$RainTomorrow <- as.numeric(weather_df$RainTomorrow) # 숫자타입으로 변경 str(weather_df) # 학습 / 검정 데이터 분리 set.seed(1) idx <- sample(1:nrow(weather_df), nrow(weather_df) * 0.7) train <- weather_df[idx, ] test <- weather_df[-idx, ] cat(dim(train), ' ', dim(test)) # 252 11 109 11 model <- glm(RainTomorrow ~ ., data = train, family = 'binomial') # train으로 테스트 model summary(model) # 예측 후 모델검증 pred <- predict(model, newdata = test, type = 'response') head(pred, 20) result_pred <- ifelse(pred > 0.5, 1, 0) result_pred # confusion matrix t <- table(result_pred, test$RainTomorrow) t sum(diag(t)) / nrow(test) # Accuracy 0.8990826 (정확도) # 모델 성능을 확인하기 위한 방법 중 ROC curve install.packages("ROCR") library(ROCR) pr <- prediction(pred, test$RainTomorrow) pr prf <- performance(pr, measure = 'tpr', x.measure = 'fpr') plot(prf) # AUC (Area Under the ROC Curve)는 ROC curve의 밑면적을 말한다. # 즉, 성능 평가에 있어서 수치적인 기준이 될 수 있는 값으로, 1에 가까울수록 # 그래프가 좌상단에 근접하게 되므로 좋은 모델이라고 할 수 있다. auc <- performance(pr, measure = 'auc') auc auc <- auc@y.values auc # 0.8711844 good 수준 # 새 값으로 예측 new_data <- train[c(1:3), ] new_data <- edit(new_data) new_data new_pred <- predict(model, newdata = new_data, type = 'response') ifelse(new_pred > 0.5, '비옴', '안 옴')
'R' 카테고리의 다른 글
R 기초 29 - 랜덤 포레스트(randomForest) (0) 2022.10.27 R 기초 28 - Decision Tree(의사결정나무) (0) 2022.10.27 R 기초 26 - 로지스틱 회귀분석(Logistic Regression), underfitting 과 overfitting, train / test split, ROC curve (0) 2022.10.27 R 기초 25 - 단순/다중 선형회귀 모델 정리 (0) 2022.10.26 R 기초 24 - AIC 통계량, stepwise regression, backward(후진소거법), forward(전진선택법), both(단계적 방법), 회귀모델 체크 사항 (0) 2022.10.26