reference: https://rafalab.github.io/dsbook/
이분형 outcome에 대해서는 민감도, 특이도, 정확도, F_1 값을 통해 모델을 개발하고, 연속형 outcome에 대해서는 RMSE를 이용한다. caret package의 confusionMatrix를 이용하면 쉽다. https://jinhaslab.wixsite.com/jinhaslab/
X1가 어떤 특정한 값 (x1)일때, \(\mathbf{Y}=k\)일 확률을 \(p_k(X)\) 라고하면, \[\mbox{Pr}(Y=k \mid X_1 = x_1,\dots,X_p=x_p), \, \mbox{for}\,k=1,\dots,K\] 라고 볼수 있고 이때 \(p_k(\mathbf{X})\)를 최대 값으로 할 수 있는 모델을 찾는 과정이다. 즉, \[\hat{Y}=\max_k\hat{p}_k(\mathbf{x})\] ## conditional expectatons 이분형 자료에서 \(P_r(Y=1|X=x)\)란 mean(Y==TRUE) or mean(Y==1)라는 R code로 나타내 진다.
hat_Y<-c(1, 1, 1, 0, 0, 0, 0, 0)
hat_Y==1
## [1] TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE
mean(hat_Y==1)
## [1] 0.375
즉 \(\hat{Y}\) 가 1일 확률은 0.375입니다.
여기까지의 내용을 실습해 보자. 실습 주제는 숫자 2와 7을 구별해 보는 것이다.
library(tidyverse)
library(dslabs)
data("mnist_27")
2와 7을 구별하기 위한 요소를 상상해 보자. 이를 feature라고 하고 우선 2가지 요소가 있다고 보자. 예를 들어 256*256 모눈종이 위에 검게 칠해진 부분에 대한 패턴을 2개 찾았다고 하자, x_1, x_2이다.
mnist_27$train %>% ggplot(aes(x_1, x_2, color=y))+geom_point()+theme_bw()
2와 7에 따라 어떤 특정한 규칙이 존재 해 보인다.
7을 예측하는 모델을 x_1, x_2를 이용해 만들어보자. linear regression model을 상상해보자. \[p(x_1, x_2) = \mbox{Pr}(Y=1 \mid X_1=x_1 , X_2 = x_2) =
\beta_0 + \beta_1 x_1 + \beta_2 x_2\]
이것을 R code로 나타내면,
fit <-mnist_27$train %>%
mutate(y=ifelse(y==7, 1, 0)) %>%
lm(y ~ x_1 +x_2, data=.)
fit 모델을 이용해서 prediction, \(\hat{Y}\) 를 구하고, 둘의 일치 확률을 구해보자.
library(caret)
p_hat <-predict(fit, newdata=mnist_27$test) # test 데이터를 통한 fit model 적용
y_hat <-factor(ifelse(p_hat >0.5, 7, 2))
confusionMatrix(y_hat, mnist_27$test$y)$overall
## Accuracy Kappa AccuracyLower AccuracyUpper AccuracyNull
## 7.500000e-01 4.975884e-01 6.840372e-01 8.083928e-01 5.300000e-01
## AccuracyPValue McnemarPValue
## 1.265765e-10 8.875371e-01
정확도가 75%가 나왔다. 이것은 간단한 연습이고 실제 확률 값은 mnist_27$true_p에 이미 저장해 놓았다. 이를 그림으로 나타내보면서 상상해 보자.
mnist_27$true_p %>% ggplot(aes(x_1, x_2, z = p, fill = p)) +
geom_raster() +
scale_fill_gradientn(colors=c("#F8766D", "white", "#00BFC4")) +
stat_contour(breaks=c(0.5), color="black")
이제 많이 왔다. 다음 부터는 몇가지 방법론을 응용해서 Accuracy를 증가 시켜보자.