मैं यह समझने की कोशिश कर रहा हूं कि इन दो पुस्तकालयों के लॉजिस्टिक प्रतिगमन से आउटपुट अलग-अलग परिणाम क्यों देता है।
मैं UCLA आईडीआर ट्यूटोरियल के डेटासेट का उपयोग कर रहा हूं , और उसके admitआधार पर भविष्यवाणी कर रहा हूं । को श्रेणीबद्ध चर के रूप में माना जाता है, इसलिए इसे सबसे पहले गिराए गए डमी चर में परिवर्तित किया जाता है । एक इंटरसेप्ट कॉलम भी जोड़ा जाता है।gregparankrankrank_1
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
# Output from scikit-learn
model = LogisticRegression(fit_intercept = False)
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]
# Output from statsmodels
logit = sm.Logit(y, X)
logit.fit().params
> Optimization terminated successfully.
Current function value: 0.573147
Iterations 6
Intercept -3.989979
C(rank)[T.2] -0.675443
C(rank)[T.3] -1.340204
C(rank)[T.4] -1.551464
gre 0.002264
gpa 0.804038
dtype: float64
इससे आउटपुट statsmodelsवैसा ही है जैसा कि आइड्रे वेबसाइट पर दिखाया गया है, लेकिन मुझे यकीन नहीं है कि क्यों scikit-learn गुणांक का एक अलग सेट तैयार करता है। क्या यह कुछ अलग नुकसान फ़ंक्शन को कम करता है? क्या कोई दस्तावेज है जो कार्यान्वयन को बताता है?
glmnetआर में पैकेज का उपयोग करके परिणाम की नकल करने की कोशिश कर रहा था , लेकिन समान गुणांक नहीं पा सका। glmnet एक अलग लागत समारोह की तुलना में है sklearn , लेकिन फिर भी अगर मैं सेटalpha=0मेंglmnet(जिसका अर्थ है केवल l2-दंड का उपयोग करें) और सेट1/(N*lambda)=C, मैं अभी भी एक ही परिणाम नहीं मिलता है?