एलएएसओओ मॉडल, और स्टेपवाइज रिग्रेशन के लिए संभावना, पी-वैल्यू वगैरह के लगातार अभिव्यक्तियों की संभावना व्याख्या सही नहीं है।
वे अभिव्यक्तियाँ संभाव्यता को कम करती हैं। उदाहरण के लिए, कुछ पैरामीटर के लिए 95% विश्वास अंतराल के बारे में कहा जाता है कि आपके पास 95% संभावना है कि विधि उस अंतराल के अंदर सच्चे मॉडल चर के साथ अंतराल में परिणाम देगी।
हालांकि, फिट किए गए मॉडल एक विशिष्ट एकल परिकल्पना के परिणामस्वरूप नहीं होते हैं, और इसके बजाय हम चेरी पिकिंग (कई संभावित वैकल्पिक मॉडल से बाहर का चयन करते हैं) जब हम स्टेपवाइज़ रिग्रेशन या LASSO प्रतिगमन करते हैं।
यह मॉडल मापदंडों की शुद्धता का मूल्यांकन करने के लिए बहुत कम समझ में आता है (विशेषकर जब यह संभावना है कि मॉडल सही नहीं है)।
नीचे दिए गए उदाहरण में, बाद में समझाया गया है, मॉडल को कई रजिस्टरों के लिए फिट किया गया है और यह बहुस्तरीयता से ग्रस्त है। इससे यह संभव हो जाता है कि मॉडल में पड़ोसी रेजिस्टर (जो दृढ़ता से सहसंबद्ध है) का चयन उस मॉडल के बजाय किया जाता है जो वास्तव में मॉडल में है। मजबूत सहसंबंध गुणांक का कारण बड़ी त्रुटि / विचरण (मैट्रिक्स से संबंधित ) होता है।( एक्स)टीएक्स)- 1
हालांकि, multicollionearity की वजह से इस उच्च विचरण नहीं पी मूल्यों या गुणांकों के मानक त्रुटि की तरह निदान में 'देखा', क्योंकि इन एक छोटे डिजाइन मैट्रिक्स पर आधारित हैं के साथ कम regressors। (और LASSO के लिए उन प्रकार के आंकड़ों की गणना करने के लिए कोई सरल विधि नहीं है )एक्स
उदाहरण: नीचे दिया गया ग्राफ़, जो कुछ सिग्नल के लिए एक खिलौना-मॉडल के परिणामों को प्रदर्शित करता है जो कि 10 गाऊसी वक्रों का एक रेखीय योग है (उदाहरण के लिए यह रसायन विज्ञान में एक विश्लेषण से मिलता-जुलता है जहां एक स्पेक्ट्रम के लिए संकेत को रेखीय योग माना जाता है। कई घटक)। 10 वक्रों का संकेत LASSO का उपयोग करके 100 घटकों (अलग-अलग माध्य से गाऊसी घटता) के मॉडल के साथ लगाया जाता है। संकेत अच्छी तरह से अनुमान लगाया गया है (लाल और काले रंग की वक्र की तुलना करें जो काफी करीब हैं)। लेकिन, वास्तविक अंतर्निहित गुणांक अच्छी तरह से अनुमानित नहीं हैं और पूरी तरह से गलत हो सकते हैं (डॉट्स के साथ लाल और काली पट्टियों की तुलना करें जो समान नहीं हैं)। अंतिम 10 गुणांक भी देखें:
91 91 92 93 94 95 96 97 98 99 100
true model 0 0 0 0 0 0 0 142.8 0 0 0
fitted 0 0 0 0 0 0 129.7 6.9 0 0 0
LASSO मॉडल ऐसे गुणांक का चयन करता है जो बहुत अनुमानित होते हैं, लेकिन गुणांक के परिप्रेक्ष्य से स्वयं का अर्थ है एक बड़ी त्रुटि जब एक गुणांक जो गैर-शून्य होना चाहिए शून्य होने का अनुमान लगाया गया है और एक पड़ोसी गुणांक शून्य होने का अनुमान है गैर शून्य। गुणांक के लिए कोई भी आत्मविश्वास अंतराल बहुत कम समझ में आता है।
LASSO फिटिंग
स्टेप वाइज फिटिंग
एक तुलना के रूप में, एक ही वक्र को एक स्टेपवाइज एल्गोरिथ्म के साथ फिट किया जा सकता है जो नीचे की छवि के लिए अग्रणी है। (समान समस्याओं के साथ जो गुणांक के करीब हैं लेकिन मेल नहीं खाते)
यहां तक कि जब आप वक्र की सटीकता पर विचार करते हैं (मापदंडों के बजाय, जो पिछले बिंदु में स्पष्ट किया जाता है कि इसका कोई मतलब नहीं है) तो आपको ओवरफिटिंग से निपटना होगा। जब आप LASSO के साथ एक फिटिंग प्रक्रिया करते हैं तो आप प्रशिक्षण डेटा (विभिन्न मापदंडों के साथ मॉडल फिट करने के लिए) और परीक्षण / सत्यापन डेटा (जो सबसे अच्छा पैरामीटर है) को खोजने के लिए उपयोग करते हैं, लेकिन आपको एक तीसरे अलग सेट का उपयोग भी करना चाहिए डेटा के प्रदर्शन का पता लगाने के लिए परीक्षण / सत्यापन डेटा।
एक पी-मूल्य या कुछ सीम्यूलर काम करने वाला नहीं है क्योंकि आप एक ट्यून किए गए मॉडल पर काम कर रहे हैं जो चेरी पिकिंग और नियमित रैखिक फिटिंग विधि से अलग (बहुत बड़ी डिग्री) है।
एक ही समस्याओं से पीड़ित stepwise प्रतिगमन करता है?
आप , पी-मान, एफ-स्कोर या मानक त्रुटियों जैसे मानों में पूर्वाग्रह जैसी समस्याओं का उल्लेख करते हैं। मेरा मानना है कि उन समस्याओं को हल करने के लिए LASSO का उपयोग नहीं किया जाता है।आर2
मैंने सोचा था कि स्टेप वाइज रिग्रेशन के स्थान पर LASSO का उपयोग करने का मुख्य कारण यह है कि LASSO एक कम लालची पैरामीटर चयन की अनुमति देता है, जो कि बहुरंगीता से कम प्रभावित होता है। (LASSO और स्टेप वाइज के बीच अधिक अंतर: मॉडल के क्रॉस सत्यापन भविष्यवाणी त्रुटि के मामले में आगे चयन / पिछड़े उन्मूलन पर LASSO की श्रेष्ठता )
उदाहरण छवि के लिए कोड
# settings
library(glmnet)
n <- 10^2 # number of regressors/vectors
m <- 2 # multiplier for number of datapoints
nel <- 10 # number of elements in the model
set.seed(1)
sig <- 4
t <- seq(0,n,length.out=m*n)
# vectors
X <- sapply(1:n, FUN <- function(x) dnorm(t,x,sig))
# some random function with nel elements, with Poisson noise added
par <- sample(1:n,nel)
coef <- rep(0,n)
coef[par] <- rnorm(nel,10,5)^2
Y <- rpois(n*m,X %*% coef)
# LASSO cross validation
fit <- cv.glmnet(X,Y, lower.limits=0, intercept=FALSE,
alpha=1, nfolds=5, lambda=exp(seq(-4,4,0.1)))
plot(fit$lambda, fit$cvm,log="xy")
plot(fit)
Yfit <- (X %*% coef(fit)[-1])
# non negative least squares
# (uses a stepwise algorithm or should be equivalent to stepwise)
fit2<-nnls(X,Y)
# plotting
par(mgp=c(0.3,0.0,0), mar=c(2,4.1,0.2,2.1))
layout(matrix(1:2,2),heights=c(1,0.55))
plot(t,Y,pch=21,col=rgb(0,0,0,0.3),bg=rgb(0,0,0,0.3),cex=0.7,
xaxt = "n", yaxt = "n",
ylab="", xlab = "",bty="n")
#lines(t,Yfit,col=2,lwd=2) # fitted mean
lines(t,X %*% coef,lwd=2) # true mean
lines(t,X %*% coef(fit2), col=3,lwd=2) # 2nd fit
# add coefficients in the plot
for (i in 1:n) {
if (coef[i] > 0) {
lines(c(i,i),c(0,coef[i])*dnorm(0,0,sig))
points(i,coef[i]*dnorm(0,0,sig), pch=21, col=1,bg="white",cex=1)
}
if (coef(fit)[i+1] > 0) {
# lines(c(i,i),c(0,coef(fit)[i+1])*dnorm(0,0,sig),col=2)
# points(i,coef(fit)[i+1]*dnorm(0,0,sig), pch=21, col=2,bg="white",cex=1)
}
if (coef(fit2)[i+1] > 0) {
lines(c(i,i),c(0,coef(fit2)[i+1])*dnorm(0,0,sig),col=3)
points(i,coef(fit2)[i+1]*dnorm(0,0,sig), pch=21, col=3,bg="white",cex=1)
}
}
#Arrows(85,23,85-6,23+10,-0.2,col=1,cex=0.5,arr.length=0.1)
#Arrows(86.5,33,86.5-6,33+10,-0.2,col=2,cex=0.5,arr.length=0.1)
#text(85-6,23+10,"true coefficient", pos=2, cex=0.7,col=1)
#text(86.5-6,33+10, "fitted coefficient", pos=2, cex=0.7,col=2)
text(0,50, "signal versus position\n true mean (black), fitted with nnls (green)", cex=1,col=1,pos=4, font=2)
plot(-100,-100,pch=21,col=1,bg="white",cex=0.7,type="l",lwd=2,
xaxt = "n", yaxt = "n",
ylab="", xlab = "",
ylim=c(0,max(coef(fit)))*dnorm(0,0,sig),xlim=c(0,n),bty="n")
#lines(t,X %*% coef,lwd=2,col=2)
for (i in 1:n) {
if (coef[i] > 0) {
lines(t,X[,i]*coef[i],lty=1)
}
if (coef(fit)[i+1] > 0) {
# lines(t,X[,i]*coef(fit)[i+1],col=2,lty=1)
}
if (coef(fit2)[i+1] > 0) {
lines(t,X[,i]*coef(fit2)[i+1],col=3,lty=1)
}
}
text(0,33, "illustration of seperate components/curves", cex=1,col=1,pos=4, font=2)