Bite Bits/R

상영 2019. 12. 21. 22:56


install.packages("vioplot")

library(vioplot)


# 표준정규분포를 이용한 예제

par(mfrow=c(1,2))

x1 <- rnorm(2000,0,1)

boxplot(x1)

vioplot(x1, col="red")




참고 : 

[1]: https://wsyang.com/2011/04/violin-plot-in-r/ "[R] boxplot의 새로운 형태 violin plot" 

 
 
 

Bite Bits/R

상영 2019. 12. 21. 01:00

두 개의 서로 다른 선형 회귀 모형의 성능을 비교할 때는 보통 다음과 같은 선택 기준을 사용한다.


조정 결정 계수 (Adjusted determination coefficient)

AIC (Akaike Information Criterion)

BIC (Bayesian Information Criterion)


조정 결정 계수와 함께 많이 쓰이는 모형 비교 기준은 최대 우도에 독립 변수의 갯수에 대한 손실(penalty)분을 반영하는 방법이다. 이를 정보량 규준(information criterion)이라고 하며 손실 가중치의 계산 법에 따라 AIC (Akaike Information Criterion)와 BIC (Bayesian Information Criterion) 두 가지를 사용한다.


AIC는 모형과 데이터의 확률 분포 사이의 Kullback-Leibler 수준을 가장 크게하기 위한 시도에서 나왔다. BIC는 데이터가 exponential family라는 가정하에 주어진 데이터에서 모형의 likelihood를 측정하기 위한 값에서 유도되었다. 둘 다 값이 작을 수록 올바른 모형에 가깝다.







AIC(Akaike Information Criterion), BIC(Bayes Information Criterion)


AIC = -2log(likelihood) + 2p

BIC = -2log(likelihood) + plog(n)

p: 변수의 갯수, n: 데이터 갯수


선형 회귀의 경우 AIC는 nlog(RSS/n) + 2p, BIC는 nlog(RSS/n) +plog(n)이다.

(상기 log는 자연로그이다.) 


변수가 많은 모델이라면(p가 큰) RSS는 작아지게 된다. 결국 AIC, BIC를 최소화 한다는 뜻은 우도(likelihood)를 가장 크게 하는 동시에 변수 갯수는 가장 적은 최적의 모델(parsimonious & explainable)을 의미하게 된다. Bias는 변수를 제거하면서 생기는 오류이고 Variance는 변수가 증가하면서 생기는 오류이다. 상기 AIC와 BIC 식의 좌변을 bias, 우변을 variation으로 부르는 이유이기도 하다. 아래 그림의 변수 갯수에 따른 bias와 variance 관계는 최적 모델 선택을 위한 균형점을 제시한다.




BIC의 경우 변수가 많을 수록 AIC보다 더 페널티를 가하는 성격을 가진다.(BIC의 우변 plog(n)에서 보통 n이 8이상이므로 log(8)>2가 된다. 따라서 AIC 우변 보다 변수 증가에 더 민감하다) 따라서 변수 갯수가 작은 것이 우선 순위라면 AIC보다 BIC를 참고하는게 좋다.



참고 : 

[1]: https://rpago.tistory.com/15 "회귀모델의 변수 선택(Variable Selection) 방법"

[2]: https://datascienceschool.net/view-notebook/bfe4438b46674c68a5ba6598147a5527/ "선형회귀모형 성능비교"

 

 
 
 

Bite Bits/R

상영 2019. 12. 21. 00:25

R에서는 nnet:multinom()을 사용해 다항 로지스틱 회귀 모델을 작성할 수 있다.


library(nnet)

model <- nnet::multinom(Species ~. , data=iris)

head(fitted(model)) # 적합 확인


> head(fitted(model)) # 적합 확인 

     setosa   versicolor    virginica

1 1.0000000 1.526406e-09 2.716417e-36

2 0.9999996 3.536476e-07 2.883729e-32

3 1.0000000 4.443506e-08 6.103424e-34

4 0.9999968 3.163905e-06 7.117010e-31

5 1.0000000 1.102983e-09 1.289946e-36

6 1.0000000 3.521573e-10 1.344907e-35


교차검증을 통해 해당 분석방법의 적합성을 판단해볼 수 있다.

# 5-fold cross validation

group.1 <- cut(seq(1,50), breaks=5, labels=F)

group.2 <- cut(seq(51,100), breaks=5, labels=F)

group.3 <- cut(seq(101,150), breaks=5, labels=F)

fold <- c(group.1, group.2, group.3)


acc <- c() # accuracy for each fold

for (i in 1:5) {

  ds.tr <-iris[fold != i, ]

  ds.ts <-iris[fold == i, ]

  

  m <- multinom(Species ~. , data=ds.tr)

  pred <- predict(m, newdata=ds.ts[,1:4])

  acc[i] <- mean(pred==ds.ts[,5]) # 예측 정확도

}


acc

mean(acc)


> acc

[1] 1.0000000 1.0000000 0.9333333 0.9333333 1.0000000

> mean(acc)

[1] 0.9733333


참고 : 

[1]: https://m.blog.naver.com/htk1019/221016607168 "R로하는 기계학습 실습 1편 : 로지스틱 회귀"

[2]: https://datascienceschool.net/view-notebook/07f92f2b2719461197260d7468f37084/ "교차 검증"