R के glmnet और Python के scikit-learn के उपयोग से रिज रिग्रेशन में क्या अंतर हैं?


11

मैं जेम्स, विटेन, हस्ती, तिब्शीरानी (2013) द्वारा 'ए इंट्रोडक्शन टू स्टैटिस्टिकल लर्निंग विद एप्लीकेशंस इन आर' पुस्तक में रिज रिग्रेशन / लास्सो पर §6.6 के माध्यम से जा रहा हूं ।

विशेष रूप से, मैं RidgeR पैकेज 'ISLR' से 'Hitters' डेटासेट पर स्किकिट-लर्न मॉडल लागू करने की कोशिश कर रहा हूं । मैंने आर कोड में दिखाए गए समान फीचर सेट किए हैं। हालाँकि, मैं glmnet()मॉडल से परिणामों के करीब नहीं पहुंच सकता । मैंने तुलना करने के लिए एक L2 ट्यूनिंग पैरामीटर चुना है। (scikit-learn में 'अल्फा' तर्क)।

अजगर:

regr = Ridge(alpha=11498)
regr.fit(X, y)

http://nbviewer.ipython.org/github/JWarmenhoven/ISL-python/blob/master/Notebooks/Chapter%206.ipynb

आर:

ध्यान दें कि तर्क alpha=0का glmnet()अर्थ है कि एक L2 जुर्माना लागू किया जाना चाहिए (रिज प्रतिगमन)। दस्तावेज़ीकरण के लिए एक भी मान दर्ज नहीं करने की चेतावनी दी गई है lambda, लेकिन परिणाम आईएसएल के समान है, जहां एक वेक्टर का उपयोग किया जाता है।

ridge.mod <- glmnet(x,y,alpha=0,lambda=11498)

क्या अंतर का कारण बनता है?

संपादित करें: R में दंडित पैकेज से
उपयोग करते समय penalized(), गुणांक scikit-learn के समान हैं।

ridge.mod2 <- penalized(y,x,lambda2=11498)

हो सकता है कि सवाल तो यह भी हो सकता है: 'क्या अंतर है glmnet()और penalized()जब कर रिज प्रतिगमन?

R पैकेज glmnet में उपयोग किए जाने वाले वास्तविक फोरट्रान कोड के लिए नया अजगर आवरण
https://github.com/civisanalytics/python-glmnet


5
Glmnet रिज रिग्रेशन के साथ पूरी तरह से अपरिचित। लेकिन डिफ़ॉल्ट रूप से, sklearn.linear_model.Ridgeअनपेक्षितकृत अवरोधन अनुमान (मानक) और जुर्माना ऐसा है जिसके ||Xb - y - intercept||^2 + alpha ||b||^2लिए न्यूनतम है b। दंड के सामने कारक 1/2या 1/n_samplesया दोनों हो सकते हैं , जिससे परिणाम तुरंत अलग हो सकते हैं। पेनल्टी स्केलिंग की समस्या को हल करने के लिए, दोनों मामलों में पेनल्टी को 0 पर सेट करें, वहां कोई भी विसंगतियों को हल करें और फिर चेक करें कि पेनल्टी वापस क्या जोड़ता है। और इस सवाल को पूछने के लिए सही जगह पर IMHO btw।

जवाबों:


9

मेरा जवाब 1 का एक कारक याद आ रहा है1N


यहां दो संदर्भ दिए गए हैं जो रिश्ते को स्पष्ट करना चाहिए।

स्केलेन डॉक्यूमेंटेशन कहता है कि linear_model.Ridgeनिम्नलिखित उद्देश्य फ़ंक्शन का अनुकूलन करता है

|Xβy|22+α|β|22

ग्लमैनेट पेपर कहता है कि लोचदार जाल निम्नलिखित उद्देश्य फ़ंक्शन का अनुकूलन करता है

|Xβy|22+λ(12(1α)|β|22+α|β|1)

ααλα

α=0λ=2αsklearnlinear_model.Ridge


और मैं पूरी तरह से @ekenberg की टिप्पणी में भी चूक गया। मैं का उपयोग करने की क्या ज़रूरत है standardize = FALSEमें glmnet()समान परिणाम प्राप्त करने के।
जोर्डी

@ जोर्डि आपको linear_model.Ridgeकिसी भी वास्तविक दुनिया विश्लेषण के लिए उपयोग करने पर निश्चित रूप से मानकीकृत होना चाहिए ।
मैथ्यू

मैं समझता हूं कि स्केलेर linear_model.Ridgeमॉडल स्वचालित रूप से सुविधाओं को मानकीकृत करता है। सामान्यीकरण वैकल्पिक है। मुझे आश्चर्य है कि मुझे फिर glmnet()समान परिणाम उत्पन्न करने के लिए मॉडल प्राप्त करने के लिए मानकीकरण को निष्क्रिय करने की आवश्यकता है ।
जॉर्डन

10

मैथ्यू ड्र्यूरी के उत्तर में 1 / N का कारक होना चाहिए। ज्यादा ठीक...

Glmnet प्रलेखन कहा गया है कि लोचदार शुद्ध हानि समारोह को कम करता है

1NXβy22+λ(12(1α)β22+αβ1)

Sklearn प्रलेखन का कहना है कि linear_model.Ridgeकम करता नुकसान समारोह

Xβy22+αβ22

जो न्यूनतम करने के बराबर है

1NXβy22+αNβ22

α=0λ=2Nαsklearn

library(glmnet)
X = matrix(c(1, 1, 2, 3, 4, 2, 6, 5, 2, 5, 5, 3), byrow = TRUE, ncol = 3)
y = c(1, 0, 0, 1)
reg = glmnet(X, y, alpha = 0, lambda = 2 / nrow(X))
coef(reg)

glmnet आउटपुट: –0.03862100, –0.03997036, –0.07276511, 0.42727955

import numpy as np
from sklearn.linear_model import Ridge
X = np.array([[1, 1, 2], [3, 4, 2], [6, 5, 2], [5, 5, 3]])
y = np.array([1, 0, 0, 1])
reg = Ridge(alpha = 1, fit_intercept = True, normalize = True)
reg.fit(X, y)
np.hstack((reg.intercept_, reg.coef_))

स्केलेर आउटपुट: –0.03862178, –0.0399697, –0.07276535, 0.42727921


4
विभिन्न पुस्तकालयों में उपयोग किए जाने वाले मापदंडों और उनके स्केलिंग की विभिन्न परिभाषाएं भ्रम का एक सामान्य स्रोत है।
एरोनडिफैजियो

1
मुझे उम्मीद नहीं होगी कि दोनों गंग और मुझे यह गलत मिलेगा।
बजे माइकल आर। चेरिक

2
हां, आप दोनों को यह गलत लगा। मेरे संपादन को अस्वीकार करने के आपके कारणों से यह स्पष्ट हो जाता है कि आप दोनों ने मेरी टिप्पणी "Missing factor of 1 / N" को आँकड़े.स्टैकएक्सचेंज.com/review/suggested
आगंतुक

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

1
@visitor क्षमा करें अगर मैं थोड़ा भीषण आया। मुझे वास्तव में यह बताने की कोशिश करनी चाहिए कि आप साइट पर एक अच्छे संभावित योगदानकर्ता की तरह लग रहे हैं, और मैं चाहता हूं कि आपको एक अच्छा अनुभव हो। हमारे पास किसी भी अन्य समूह की तरह कुछ सामाजिक मानदंड हैं, और यदि आप उनके बारे में जानते हैं तो आपके पास बेहतर अनुभव होगा। मुझे अभी भी लगता है कि "मैथ्यू डॉरी का उत्तर गलत है" काफी कठोर है, यह निश्चित रूप से संवाद करने के बेहतर तरीके हैं कि मेरा जवाब गलत तरीके से कारक याद आ रहा है1N । "एक्स का जवाब गलत है" एक व्यक्तिगत हमले के रूप में पढ़ता है।
मैथ्यू ड्र्यू
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.