डेटा सेट glmnet
पर लैस्सो के लिए वैनिला सादे क्रॉस-सत्यापन कैसे करें, इस पर एक उदाहरण mtcars
।
लोड डेटा सेट।
सुविधाएँ (स्वतंत्र चर) तैयार करें। उन्हें matrix
वर्ग का होना चाहिए । df
श्रेणीबद्ध चर युक्त युक्तियों को बदलने का सबसे आसान तरीका matrix
है model.matrix
। डिफ़ॉल्ट रूप से glmnet
इंटरसेप्ट को ध्यान में रखें, इसलिए आप मॉडल मैट्रिक्स से बेहतर इंटरसेप्ट स्ट्रिप करेंगे।
प्रतिक्रिया (आश्रित चर) तैयार करें। चलो ऊपर की कारों को औसत mpg
('1') और बाकी को अकुशल ('0') के रूप में कोड करते हैं। इस चर को कारक में बदलें।
के माध्यम से क्रॉस-सत्यापन चलाएँ cv.glmnet
। यह alpha=1
डिफ़ॉल्ट glmnet
मापदंडों से पिकअप करेगा , जो आपने पूछा है: लासो रिग्रेशन।
क्रॉस-वैलिडेशन के आउटपुट की जांच करने से आपको कम से कम 2 टुकड़ों में रुचि हो सकती है:
लैम्ब्डा, जो क्रॉस-वैरिफाइड त्रुटि को कम करता है। glmnet
वास्तव में 2 लैम्ब्डा प्रदान करता है: lambda.min
और lambda.1se
। यह आपका निर्णय कॉल एक प्रैक्टिसिंग सांख्यिकीविद् के रूप में है जिसे उपयोग करना है।
जिसके परिणामस्वरूप नियमित रूप से गुणांक होते हैं।
कृपया उपरोक्त निर्देशों के अनुसार R कोड देखें:
# Load data set
data("mtcars")
# Prepare data set
x <- model.matrix(~.-1, data= mtcars[,-1])
mpg <- ifelse( mtcars$mpg < mean(mtcars$mpg), 0, 1)
y <- factor(mpg, labels = c('notEfficient', 'efficient'))
library(glmnet)
# Run cross-validation
mod_cv <- cv.glmnet(x=x, y=y, family='binomial')
mod_cv$lambda.1se
[1] 0.108442
coef(mod_cv, mod_cv$lambda.1se)
1
(Intercept) 5.6971598
cyl -0.9822704
disp .
hp .
drat .
wt .
qsec .
vs .
am .
gear .
carb .
mod_cv$lambda.min
[1] 0.01537137
coef(mod_cv, mod_cv$lambda.min)
1
(Intercept) 6.04249733
cyl -0.95867199
disp .
hp -0.01962924
drat 0.83578090
wt .
qsec .
vs .
am 2.65798203
gear .
carb -0.67974620
अंतिम टिप्पणियाँ:
ध्यान दें, मॉडल का आउटपुट गुणांक के सांख्यिकीय महत्व, केवल मूल्यों के बारे में कुछ नहीं कहता है।
l1 दंड (lasso), जो आपने मांगा था, अस्थिरता के लिए कुख्यात है जैसा कि इस ब्लॉग पोस्ट और इस स्टैकएक्सचेंज प्रश्न में स्पष्ट है । एक बेहतर तरीका यह भी हो सकता है alpha
कि आप एल -1 और एल 2 पेनल्टीज़रों के उचित मिश्रण पर निर्णय लें।
क्रॉस-वैलिडेशन करने का एक वैकल्पिक तरीका है कैरेट की ओर मुड़ना train( ... method='glmnet')
और अंत में, इसके बारे में अधिक जानने का सबसे अच्छा तरीका है cv.glmnet
और यह डिफॉल्ट से आ रहा glmnet
है बेशक ?glmnet
आर के कंसोल में है))