Ich habe gekämpft, um zu rechtfertigen, warum ich intercept_=0.0
mit LogisticRegression von scikit-learn bekomme. Der Einbau logistische Regression hat die folgenden Parameter:Ist es normal, intercept_ = 0.0 in scikits LogisticRegression zu haben?
LogisticRegression(C=0.0588579519026603, class_weight='balanced',
dual=False, fit_intercept=True, intercept_scaling=6.2196752179914165,
max_iter=100, multi_class='ovr', n_jobs=1, penalty='l1',
random_state=1498059397, solver='liblinear', tol=0.0001,
verbose=0, warm_start=False)
Der Datensatz verwende ich die folgenden Eigenschaften:
- Form (113.441, 69)
- 1-Funktion mit unique (-1, 0)
- 68 Merkmale mit uniques (1, 0)
ich begann mit den coef_
Erkundung an Huldigungen der logistischen Regression und sie sind die folgenden:
array([[-0.11210483, 0.09227395, 0.23526487, 0.1740976 , 0. ,
-0.3282085 , -0.41550312, 1.67325241, 0. , 0. ,
-0.06987265, 0. , -0.03053099, 0. , 0.09354742,
0.06188271, -0.24618392, 0.0368765 , 0. , 0. ,
-0.31796638, 1.75208672, -0.1270747 , 0.13805016, 0. ,
0.2136787 , -0.4032387 , -0.00261153, 0. , 0.17788052,
-0.0167915 , 0.34149755, 0.0233405 , -0.09623664, -0.12918872,
0. , 0.47359295, -0.16455172, -0.03106686, 0.00525001,
0.13036978, 0. , 0. , 0.01318782, -0.10392985,
0. , -0.91211158, -0.11622266, -0.18233443, 0.43319013,
-0.06818055, -0.02732619, 0. , -0.09166496, 0.03753666,
0.03857431, 0. , -0.02650828, 0.19030955, 0.70891911,
-0.07383034, -1.29428322, -0.69191842, 0. , 0.43798269,
-0.66869241, 0. , 0.44498888, -0.08931519]])
wo wir einige Nullen (erwartet aufgrund L1 Strafe, nicht wahr?) zusammen mit intercept_=0.0
sehen können.
Ich möchte hinzufügen, dass ich versuchte mit class_weight=None
und ich bekomme intercept_ != 0.0
.
Was könnte der Grund für diese intercept_=0.0
sein? Wird der Abschnitt ebenfalls regularisiert und zufällig auf Null gesetzt (wie jeder andere Koeffizient von coef_
)? War es nur "Glück"? Liegt es an meinem Datensatz?
Ich habe zufällig einen Blick auf scikit-lernen Logistische Regression 'liblinear' [hier] (https://github.com/scikit-learn/scikit-learn/blob/55c9443ca47eac25a3b878b7654744e59474f38f/sklearn/svm/base.py# L903) und festgestellt, dass "intercept_ = intercept_scaling * raw_coef_ [:, -1]'. Aber ist das eine gute Übung? Ich habe gelesen, dass es nicht empfohlen wird, den Abfangterm zu regularisieren, aber ich habe tatsächlich keinen String-Grund gefunden. – HLopes
Ich möchte genauer hinsehen, weil Ihr 'intercept_scaling = 6.2196752179914165' wenn der Standardwert 1 sein sollte. (Ich sehe keinen Grund, dass es sich ändern sollte, wenn' .fit' aufgerufen wird.) Könnten Sie möglicherweise Ihre CSV-Daten an Google senden Dokumente? Wie auch immer, "liblinear.train_wrap" reguliert den Intercept-Vektor. –
Ich kam zu diesem 'intercept_scaling'-Wert aufgrund der Hyperparametersuche mit [skopt] (https://scikit-optimize.github.io/) über die meisten Logit-Hyperparameter. Ich werde versuchen, den Datensatz hochladen – HLopes