मैं आर में पैकेज sklearn
का उपयोग करके लॉजिस्टिक रिग्रेशन लाइब्रेरी से परिणामों की नकल करने की कोशिश कर रहा हूं glmnet
।
से sklearn
रसद प्रतिगमन प्रलेखन , यह l2 दंड के अंतर्गत लागत समारोह को कम करने के प्रयास कर रहा है
के विगनेट्स से glmnet
, इसका कार्यान्वयन थोड़ा अलग लागत फ़ंक्शन
कुछ ट्वीक दूसरे समीकरण में, और सेटिंग से साथ , λ मिनट β , बीटा 0 1
जो sklearn
केवल एक कारक द्वारा लागत फ़ंक्शन से भिन्न होता है यदि सेट 1, इसलिए मुझे दो पैकेजों से समान गुणांक अनुमान की उम्मीद थी। लेकिन वे अलग हैं। मैं UCLA आईडीआरट्यूटोरियलसे डेटासेट का उपयोग कर रहा हूं,और उसकेआधार परभविष्यवाणीकर रहा हूं। 400 अवलोकन हैं, इसलिएC=1,λ=0.0025 के साथ।admit
gre
gpa
rank
#python sklearn
df = pd.read_csv("https://stats.idre.ucla.edu/stat/data/binary.csv")
y, X = dmatrices('admit ~ gre + gpa + C(rank)', df, return_type = 'dataframe')
X.head()
> Intercept C(rank)[T.2] C(rank)[T.3] C(rank)[T.4] gre gpa
0 1 0 1 0 380 3.61
1 1 0 1 0 660 3.67
2 1 0 0 0 800 4.00
3 1 0 0 1 640 3.19
4 1 0 0 1 520 2.93
model = LogisticRegression(fit_intercept = False, C = 1)
mdl = model.fit(X, y)
model.coef_
> array([[-1.35417783, -0.71628751, -1.26038726, -1.49762706, 0.00169198,
0.13992661]])
# corresponding to predictors [Intercept, rank_2, rank_3, rank_4, gre, gpa]
> # R glmnet
> df = fread("https://stats.idre.ucla.edu/stat/data/binary.csv")
> X = as.matrix(model.matrix(admit~gre+gpa+as.factor(rank), data=df))[,2:6]
> y = df[, admit]
> mylogit <- glmnet(X, y, family = "binomial", alpha = 0)
> coef(mylogit, s = 0.0025)
6 x 1 sparse Matrix of class "dgCMatrix"
1
(Intercept) -3.984226893
gre 0.002216795
gpa 0.772048342
as.factor(rank)2 -0.530731081
as.factor(rank)3 -1.164306231
as.factor(rank)4 -1.354160642
R
के रूप में देखा जा सकता है उत्पादन, किसी भी तरह नियमितीकरण के बिना रसद प्रतिगमन के करीब है यहाँ । क्या मैं कुछ याद कर रहा हूँ या कुछ गलत कर रहा हूँ?
अद्यतन: मैंने एक ही प्रक्रिया का संचालन करने के लिए LiblineaR
पैकेज का उपयोग करने की भी कोशिश की R
, और फिर liblinear
भी अनुमानों का एक और अलग सेट मिला ( यह भी सॉल्वर है sklearn
):
> fit = LiblineaR(X, y, type = 0, cost = 1)
> print(fit)
$TypeDetail
[1] "L2-regularized logistic regression primal (L2R_LR)"
$Type
[1] 0
$W
gre gpa as.factor(rank)2 as.factor(rank)3 as.factor(rank)4 Bias
[1,] 0.00113215 7.321421e-06 5.354841e-07 1.353818e-06 9.59564e-07 2.395513e-06
अद्यतन 2: में मानकीकरण बंद करना glmnet
:
> mylogit <- glmnet(X, y, family = "binomial", alpha = 0, standardize = F)
> coef(mylogit, s = 0.0025)
6 x 1 sparse Matrix of class "dgCMatrix"
1
(Intercept) -2.8180677693
gre 0.0034434192
gpa 0.0001882333
as.factor(rank)2 0.0001268816
as.factor(rank)3 -0.0002259491
as.factor(rank)4 -0.0002028832