#날씨관련정보로 비유무 예측 weather <-read.csv("testdata/weather.csv",stringsAsFactors = F) # dim(weather) #366행 15열 짜리 head(weather,3) str(weather) #전체자료 읽기 weather_df <- weather[,c(-1,-6,-8,-14)]# 일부 몇개만 뺌 -6 하면 WindGustDir 빠짐 dim(weather_df) # 4개를 빼서 11열이 됨 str(weather_df) weather_df$RainTomorrow[weather_df$RainTomorrow=="Yes"] <-1 #레인 투머로우 값을 yes 값을 1로 바꿈 no는 0 (비가오면 1이되고 비가안오면 0이됨) weather_df$RainTomorrow[weather_df$RainTomorrow=="No"] <-0 weather_df$RainTomorrow<-as.numeric(weather_df$RainTomorrow) str(weather_df) #학습데이터와 검정데이터로 분리(7:3) idx<-sample(1:nrow(weather_df),nrow(weather_df)*0.7) train <-weather_df[idx,] test <- weather_df[-idx,] nrow(train);nrow(test) #로지스틱 회쉬 모델생성 weather_model <- glm(RainTomorrow ~ ., data = train, family = 'binomial') # 독립변수 값이 한개 일때 glm을 쓴다. RainTomorrow(독립변수) 이항형 일경우 binomial을 지정한다. train으로 모델을 만듬 weather_model summary(weather_model) #설명력은 보여주지 않음 #예측치 생성 pred<-predict(weather_model, newdata=test, type='response') pred #로직변환 (로지스틱함수를 쓰거나 if문을 써도 된다.) test[1,] #0 또는 1값으로 바꿔주기 result_pred <- ifelse(pred>=0.5 ,1 ,0) #pred 값이 0.5보다 크면 1(비가 옴)이고 작으면 0(비가 안옴)이다 result_pred table(result_pred) # 정확도 확인 : confusion matrix 2행 2열 표를 만듬 (table) table(result_pred, test$RainTomorrow) #table(모델의 예측치, 종속변수y) (84+11) /nrow(test) # 0.8636364 accuracy(정확도가) 86.4%의 정확도가 있다. 필요한변수만 쓰면된다.(forward) # ROC curve (민감도) install.packages('ROCR') library(ROCR) pr<-prediction(pred, test$RainTomorrow) pr prf <-performance(pr, measure = "tpr",x.measure="fpr" ) #y축 =measure = "tpr", x축 =x.measure="fpr" plot(prf) # auc가 true positive rate 에 0.1에 가까이 갈수록 좋은 모델이다. #AUC 영역값 구하기 auc <-performance(pr,measure = "auc")#리스트 값으로 나옴 y.values 값만 찾으면 됨 auc<-auc@y.values[[1]] auc