R에서 로지스틱 회귀에 대한 대안


55

로지스틱 회귀와 동일한 작업을 수행하는 많은 알고리즘을 원합니다. 그것은 설명 변수 (X)가있는 이진 반응 (Y)에 대한 예측을 제공 할 수있는 알고리즘 / 모델입니다.

알고리즘 이름을 지정한 후에 R에서 알고리즘을 구현하는 방법을 보여 주면 기쁠 것입니다. 다른 모델로 업데이트 할 수있는 코드는 다음과 같습니다.

set.seed(55)
n <- 100
x <- c(rnorm(n), 1+rnorm(n))
y <- c(rep(0,n), rep(1,n))
r <- glm(y~x, family=binomial)
plot(y~x)
abline(lm(y~x), col='red', lty=2)
xx <- seq(min(x), max(x), length=100)
yy <- predict(r, data.frame(x=xx), type='response')
lines(xx, yy, col='blue', lwd=5, lty=2)
title(main='Logistic regression with the "glm" function')

고정 예측 변수 집합을 고려하고 있다고 가정해야합니다. 예를 들어 예측 변수를 사용 하여 신뢰할 수있는 예측을 얻는 데 관심이 있거나 ? X jkXj(j=1k)
chl

본인은 개인적 관심을 위해 처벌이 필요하지 않으며, 여기에서 지식을 위해 두 가지 모두 관련 답변이라고 말합니다.)
Tal Galili

나중에 참조 할 수 있도록 CW 이외의 질문으로 허용 한 방식으로이 질문에 문구를 표시 할 수 있습니다. meta.stats.stackexchange.com/questions/290/…
Shane

링크 Shane에 감사드립니다. 매우 흥미로운 토론이있었습니다. Thomasas의 답변을 읽은 후에는 이것이 가능한 많은 대안을 찾는 것이기 때문에 이것이 여전히 커뮤니티 위키 여야한다고 생각합니다 (한 사람이 공급할 수 있을지 의심되는 것). 그러나 다시 그 스레드로 안내해 주셔서 감사합니다!
탈 Galili

실제로 대답하기에는 너무 광범위하지는 않습니다. 현재 6 개의 답변이 있습니다 (5 개의 upvoted). 또한, 질문은 고도로 반박되고 선호도가 높으며 CW입니다. IMO는 계속 열려 있어야합니다.
gung-모니 티 복원

답변:


28

현재 인기있는 randomForest 및 gbm (MART 또는 기계 학습 문헌에서 그라디언트 부스팅)은 간단한 트리에 해당합니다. 또한 정규화를 위해 MAP를 사용하는 bayesglm도 인기가 있습니다.

install.packages(c("randomForest", "gbm", "rpart", "arm"))

library(randomForest)
library(gbm)
library(rpart)
library(arm)

r1 <- randomForest(y~x)
r2 <- gbm(y~x)
r3 <- rpart(y~x)
r4 <- bayesglm(y ~ x, family=binomial)

yy1 <- predict(r1, data.frame(x=xx))
yy2 <- predict(r2, data.frame(x=xx))
yy3 <- predict(r3, data.frame(x=xx))
yy4 <- predict(r4, data.frame(x=xx), type="response")

24

실제로, 그것은 당신이 얻고 싶은 것에 달려 있습니다. 예측에 대해서만 로지스틱 회귀 분석을 수행하는 경우 데이터에 적합한 감독 된 분류 방법을 사용할 수 있습니다. 다른 가능성 : 판별 분석 (패키지 MASS의 lda () 및 qda ())

r <- lda(y~x) # use qda() for quadratic discriminant analysis

xx <- seq(min(x), max(x), length=100)
pred <- predict(r, data.frame(x=xx), type='response')
yy <- pred$posterior[,2]

color <- c("red","blue")

plot(y~x,pch=19,col=color[pred$class])
abline(lm(y~x),col='red',lty=2)
lines(xx,yy, col='blue', lwd=5, lty=2)
title(main='lda implementation')

반면에 예측에 대한 신뢰 구간 또는 추정치의 표준 오차가 필요한 경우 대부분의 분류 알고리즘이 도움이되지 않습니다. 여러 패키지를 사용할 수있는 일반화 된 첨가제 (혼합) 모델을 사용할 수 있습니다. 나는 종종 Simon Wood의 mgcv 패키지를 사용합니다. 스플라인을 사용하여 예측 변수를 모델링 할 수 있으므로 일반화 된 가산 모델은 로지스틱 회귀보다 유연성이 뛰어납니다.

set.seed(55)
require(mgcv)
n <- 100
x1 <- c(rnorm(n), 1+rnorm(n))
x2 <- sqrt(c(rnorm(n,4),rnorm(n,6)))
y <- c(rep(0,n), rep(1,n))
r <- gam(y~s(x1)+s(x2),family=binomial)

xx <- seq(min(x1), max(x1), length=100)
xxx <- seq(min(x2), max(x2), length=100)
yy <- predict(r, data.frame(x1=xx,x2=xxx), type='response')

color=c("red","blue")
clustering <- ifelse(r$fitted.values < 0.5,1,2)

plot(y~x1,pch=19,col=color[clustering])
abline(lm(y~x1),col='red',lty=2)
lines(xx,yy, col='blue', lwd=5, lty=2)
title(main='gam implementation')

할 일이 훨씬 더 많습니다.

op <- par(mfrow=c(2,1))
plot(r,all.terms=T)
par(op)

summary(r)
anova(r)

r2 <- gam(y~s(x1),family=binomial)
anova(r,r2,test="Chisq")

...

일반화 된 부가 모델에 대해 Simon Wood책을 추천합니다


14

Joe에 동의하며 다음을 추가합니다.

데이터 / 상황에 따라 다르지만 원칙적으로 모든 분류 방법을 사용할 수 있습니다. 예를 들어, 널리 사용되는 C-SVM 모델과 함께 SVM을 사용할 수도 있습니다. 다음은 방사형 기본 커널 함수를 사용하는 kernlab의 예입니다.

library(kernlab)
x <- rbind(matrix(rnorm(120),,2),matrix(rnorm(120,mean=3),,2))
y <- matrix(c(rep(1,60),rep(-1,60)))

svp <- ksvm(x,y,type="C-svc")
plot(svp,data=x)

12

캐럿 패키지 를 통해 학습 할 수있는 약 100 개의 분류 및 회귀 모델이 있습니다 . 분류 모델 중 하나가 선택 사항이 될 수 있습니다 (회귀 모델과 달리 지속적인 응답이 필요함). 예를 들어 임의의 숲을 훈련시키는 방법 :

library(caret)
train(response~., data, method="rf")

사용 가능한 전체 모델 목록은 배포판과 함께 제공되는 캐럿 모델 훈련 비 네트를 참조하십시오. 이중 사용 및 분류 모델 (둘 다 사용할 수 있음)과 회귀 전용 (할 수없는)으로 나뉩니다. 캐럿은 선택한 모델의 매개 변수를 자동으로 학습시킵니다.


7

Naive Bayes는 이진 반응을 찾기 위해 데이터를 훈련시키는 간단한 방법입니다.

library(e1071)
fitNB <- naiveBayes(y~x)
predict(fitNB, x)

3

로지스틱 회귀 분석에는 아직 간략히 설명하지 않은 두 가지 변형이 있습니다. 먼저 로지스틱 회귀 분석은 누적 로지스틱 분포 (시그 모이 드라고도 함) 인 로지스틱 함수를 사용하여 확률을 추정합니다. 다른 분포에서 파생 된 함수를 사용하여 확률을 추정 할 수도 있습니다. 로지스틱 회귀를 제외한 가장 일반적인 방법은 정규 분포에서 파생 된 프로 빗 회귀입니다. probit와 logit의 차이점에 대한 자세한 내용은 다음 사이트를 방문하십시오.

로짓과 프로 빗 모델의 차이점

set.seed(55)
n <- 100
x <- c(rnorm(n), 1+rnorm(n))
y <- c(rep(0,n), rep(1,n))
r <- glm(y~x, family=binomial(link="probit"))
plot(y~x)
abline(lm(y~x),col='red',lty=2)
xx <- seq(min(x), max(x), length=100)
yy <- predict(r, data.frame(x=xx), type='response')
lines(xx,yy, col='red', lwd=5, lty=2)
title(main='Probit regression with the "glm" function')

두 번째 대안은 구현 한 물류 기능의 주간을 나타냅니다. 표본 크기가 작거나 결 측값이있는 경우 물류 기능은 권장되지 않습니다. 따라서 정확한 로지스틱 회귀가 더 나은 모델입니다. 결과의 로그 확률은 예측 변수의 선형 조합으로 모델링됩니다.

elrm(formula = y ~ x)

또한 언급 할 다른 대안이 있습니다.

  1. 양방향 비 상표
  2. 두 그룹 판별 함수 분석.
  3. 호텔 링의 T2.

최종 설명 : 로지스틱 회귀는 숨겨진 레이어가없고 최종 레이어의 한 지점 만있는 작은 신경망과 같습니다. 따라서 nnetR 과 같은 신경망 패키지 구현을 사용할 수 있습니다 .

편집하다:

몇 주 후에 WinnowPerceptron 알고리즘 도 있다는 것을 깨달았습니다 . 둘 다 두 그룹으로 분류하기 위해 작동하는 분류 자이지만, 지난 15 년 동안 두 가지 모두 선호하지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.