आर में लॉजिस्टिक रिग्रेशन के विकल्प


55

मैं उतने ही एल्गोरिदम चाहूंगा जो लॉजिस्टिक रिग्रेशन के समान कार्य कर सकें। वह एल्गोरिदम / मॉडल है जो कुछ व्याख्यात्मक चर (एक्स) के साथ एक द्विआधारी प्रतिक्रिया (वाई) के लिए एक भविष्यवाणी दे सकता है।

मुझे खुशी होगी अगर आप एल्गोरिथ्म का नाम रखने के बाद, यदि आप यह भी दिखाएंगे कि इसे आर में कैसे लागू किया जाए। यहां एक कोड है जिसे अन्य मॉडलों के साथ अपडेट किया जा सकता है:

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')

क्या हमें यह मान लेना है कि आप भविष्यवक्ताओं के एक निश्चित सेट पर विचार कर रहे हैं, अर्थात आप भविष्यवाणियों को दिए गए एक विश्वसनीय पूर्वानुमान प्राप्त करने में रुचि रखते हैं , या क्या आप पर किसी प्रकार के दंड के ? kXj(j=1k)
chl

मैं स्वीकार करता हूं कि मेरे व्यक्तिगत हित के लिए, दंड आवश्यक नहीं होगा, और ज्ञान के लिए यहां मैं कहूंगा कि दोनों प्रासंगिक उत्तर हैं :)
ताल गलिी

भविष्य के संदर्भ के लिए: आप इस प्रश्न को इस तरह से उद्धृत कर सकते हैं कि हमने इसे गैर-सीडब्ल्यू प्रश्न के रूप में अनुमति दी होगी। Meta.stats.stackexchange.com/questions/290/…
शेन

लिंक शेन के लिए धन्यवाद। एक बहुत ही दिलचस्प चर्चा आपने वहां खोली। थॉमसस के जवाब को पढ़ने के बाद, मेरा मानना ​​है कि यह अभी भी एक सामुदायिक विकी होना चाहिए, क्योंकि मेरा इरादा अधिक से अधिक विकल्प खोजने का था (मुझे संदेह है कि कोई भी व्यक्ति आपूर्ति करने में सक्षम होगा)। फिर भी, फिर से, मुझे उस धागे को निर्देशित करने के लिए धन्यवाद!
ताल गैली

यह वास्तव में जवाबदेह होने के लिए बहुत व्यापक नहीं है - इसके वर्तमान में 6 उत्तर हैं (5 उत्कीर्ण)। इसके अलावा, इस सवाल का बहुत उत्थान और अत्यधिक समर्थन है, और सीडब्ल्यू है। यह खुला रहना चाहिए, आईएमओ।
गुंग - फिर से बहाल करें मोनिका

जवाबों:


28

लोकप्रिय अधिकार अभी रैंडम फॉरेस्ट और gbm हैं (जिन्हें मशीन लर्निंग लिटरेचर में मार्ट या ग्रैडिएंट बूस्टिंग कहा जाता है), साधारण पेड़ों के लिए समकक्ष। इसके अलावा लोकप्रिय बायसेगलम है, जो नियमितीकरण के लिए याजकों के साथ एमएपी का उपयोग करता है।

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

दरअसल, यह इस बात पर निर्भर करता है कि आप क्या प्राप्त करना चाहते हैं। यदि आप केवल भविष्यवाणियों के लिए लॉजिस्टिक प्रतिगमन करते हैं, तो आप अपने डेटा के लिए अनुकूल किसी भी पर्यवेक्षित वर्गीकरण पद्धति का उपयोग कर सकते हैं। एक अन्य संभावना: विभेदक विश्लेषण (lda () और qda () पैकेज MASS से)

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')

दूसरी ओर, यदि आपको अपने अनुमानों या अपने अनुमानों पर मानक त्रुटियों के आसपास आत्मविश्वास अंतराल की आवश्यकता है, तो अधिकांश वर्गीकरण एल्गोरिदम आपकी मदद करने नहीं जा रहे हैं। आप सामान्यीकृत योज्य (मिश्रित) मॉडल का उपयोग कर सकते हैं, जिसके लिए कई पैकेज उपलब्ध हैं। मैं अक्सर साइमन वुड के 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")

...

मैं सामान्यीकृत एडिटिव मॉडल्स के बारे में साइमन वुड की पुस्तक की सिफारिश करूंगा


14

मैं जो से सहमत हूं, और जोड़ूंगा:

किसी भी वर्गीकरण पद्धति का उपयोग सिद्धांत रूप में किया जा सकता है, हालांकि यह डेटा / स्थिति पर निर्भर करेगा। उदाहरण के लिए, आप एक SVM का उपयोग कर सकते हैं, संभवतः लोकप्रिय C-SVM मॉडल के साथ। यहां रेडियल आधार कर्नेल फ़ंक्शन का उपयोग करके कर्नेल से एक उदाहरण दिया गया है:

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

बायव प्रतिक्रिया को खोजने के लिए नाइव बेयस प्रशिक्षण डेटा का एक अच्छा सरल तरीका है।

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

3

लॉजिस्टिक रिग्रेशन के दो रूपांतर हैं जिन्हें अभी तक रेखांकित नहीं किया गया है। सबसे पहले लॉजिस्टिक रिग्रेशन एक लॉजिस्टिक फ़ंक्शन का उपयोग करके संभाव्यता का अनुमान लगाता है जो कि एक क्यूमलेटिव लॉजिस्टिक डिस्ट्रीब्यूशन (जिसे सिग्मॉयड भी कहा जाता है) है। आप अन्य वितरणों से प्राप्त कार्यों का उपयोग करके संभावनाओं का अनुमान लगा सकते हैं। लॉजिस्टिक रिग्रेशन के अलावा सबसे आम तरीका प्रोबेट रिग्रेशन है जो सामान्य वितरण से प्राप्त होता है। प्रोबिट और लॉगिट के अंतर के बीच अधिक विस्तृत चर्चा के लिए कृपया निम्नलिखित साइट पर जाएं।

लॉगिट और प्रोबेट मॉडल के बीच अंतर

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।

अंतिम टिप्पणी: एक लॉजिस्टिक रिग्रेशन छिपी हुई परतों के बिना एक छोटे तंत्रिका नेटवर्क के समान है और अंतिम परत में केवल एक बिंदु है। इसलिए आप न्यूरल नेटवर्क पैकेज के कार्यान्वयन का उपयोग कर सकते हैं जैसे कि nnetआर।

संपादित करें:

कुछ हफ्ते बाद मुझे एहसास हुआ कि वहाँ भी है कि फटकना और perceptron एल्गोरिथ्म। दोनों ऐसे क्लासिफायर हैं जो दो समूहों में वर्गीकरण के लिए भी काम करते हैं, लेकिन दोनों पिछले 15 वर्षों में पक्ष से बाहर हो गए हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.