일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 프로그래머스
- JPA
- Q타입클래스
- programmers
- 이중배열
- RProgramming
- 알고리즘
- summary()
- queryDSL
- r
- DTO사용이유
- str()
- 머신러닝프로세스
- Spring
- R프로그래밍
- cor()
- java
- 자바
- Eclipse
- stepfilter
- git
- LIKE검색
- 한글깨지는문제
- core.autocrlf
- 머신러닝
- 이클립스
- R명령어
- querydsl적용하기
- Rstudio
- git오류
- Today
- Total
놀고 싶어요
[R Programming] 로지스틱 회귀분석 본문
머신러닝 로지스틱 회귀분석
종속변수가 범주형인 경우 어떻게 머신러닝을 활용할 수 있을까?
머신러닝 프로세스는 회귀분석에서 설명한 내용과 동일하게 적용이 되지만 다만 다른 함수를 사용한다.
로지스틱 회귀분석
종속변수가 범주형 데이터이다. 출발점에는 회귀분석에 있어서 선형관계를 설명하는 것과 동일한 모양을 갖춘다.
‘특정 대여소의 일평균/시간당 평균 대여건수가 너무 낮다면 대여소 위치를 바꿔야 하지 않을까?’
- 대여건수의 평균이 최소 기준을 넘나 넘지않나 예측이 필요하다.
로지스틱스 회귀분석에서는 사용자가 임계값을 입력하는 것을 기본으로 모델의 설명력을 판단한다.
로지스틱 회귀분석의 머신러닝 프로세스에서는 Accuracy, Precision, Recall, F1-score 등의 확률을 기반으로 평가한다.
Train
1. 대여건수가 500건 이상을 나타내는 컬럼 생성해준다.
bike_weather$over_500 <- 1
bike_weather[bike_weather$Count < 500, 'over_500'] <- 0
bike_weather
마지막 컬럼으로 over_500이 추가된다. Count값에 따라 1 또는 0으로 구분된다.
2. 데이터를 train set와 test set으로 나눈다.
train_index <- createDataPartition(bike_weather$Time_out, p=.7, list=F)
training <- bike_weather[train_index,]
testing <- bike_weather[-train_index,]
logreg <- glm(over_500 ~ cum_precipitation+humidity+temp+wind, data=training, family=binomial(link='logit'))
summary(logreg)
회귀분석과 마찬가지로 여러 가지 지표 값들이 결과로 정리되어 제시된다.
좀 더 관심을 두어야 할 부분은 각 독립변수의 p-value이다. (Pr(>|z|))
Humidity를 제외한 다른 변수들의 통계적인 유의성이 부족하다.
좋은 모델을 만들기 위해서는 p-value의 유의성이 확인되지 않은 독립변수들은 제외하는 것이 일반적인계 통계적 시각이지만 머신러닝에서는 조금 다르게 보기도 한다.
여기서는 독립변수는 그대로 유지하고 다음 단계로 넘어가본다.
Predict, Evaluate
MLmetrics 패키지 사용
pred$prediction <- predict(logreg, newdata=testing, type='response')
앞서 생성한 로지스틱 회귀 모델을 가지고 예측을 수행한다.
pred <- ifelse(pred$prediction<0.5, 0, 1)
예측 결과로 얻게 되는 값은 확률 값이다.
이 확률 값을 보고 0으로 판단할지 1로 판단할지를 결정해주는 과정이다.
기준값 threshold를 0.5로 사용한 경우다. 기준값은 0~1 사이 값인데 1에 가까운 값을 사용하고도 정확도가 높으면 좋은 예측 모델이다.
Recall(pred, testing$over_500, positive='1')
Accuracy(pred, testing$over_500)
Precision(testing$over_500, pred, positive=1)
F1_Score(testing$over_500, pred, positive = 1)
정확도는 training set와 test set을 나누는 과정에서 임의추출되므로 매번 다른 값이 나온다.
정확도의 종류
Accuracy: Y를 Y로, N을 N으로 맞힌 경우를 전체의 수로 나누어서 계산한다.
Precision: Y라고 예측한 것 중 실제로 Y였던 경우의 확률
Recall: Y인 케이스에서 얼마나 Y라고 예측했는지 계산
F1_Score: Precision와 Recall의 조화평균
'R' 카테고리의 다른 글
[R Programming] 머신러닝: 군집분석 - K Means (0) | 2021.05.25 |
---|---|
[R Programming] 머신러닝: 의사결정나무 (0) | 2021.05.23 |
[R Programming] 다중회귀분석: 독립변수가 범주형 데이터 (0) | 2021.05.20 |
[R Programming] 회귀분석 - 독립변수가 1개인 회귀분석 (0) | 2021.05.19 |
[R Programming] R 기본 명령어 정리 (0) | 2021.05.19 |