Warum gibt die logistische Regression in Spark und R unterschiedliche Modelle für dieselben Daten zurück?

7

Ich habe die logistischen Regressionsmodelle für R ( glm) und Spark ( LogisticRegressionWithLBFGS) mit einem Datensatz von 390 obs verglichen . von 14 Variablen.

Die Ergebnisse sind im Achsenabschnitt und in den Gewichten völlig unterschiedlich. Wie kann man das erklären?

Hier sind die Ergebnisse von Spark (LogisticRegressionWithLBFGS):

model.intercept  : 
 1.119830027739959
model.weights :
 GEST    0.30798496002530473
 DILATE  0.28121771009716895
 EFFACE  0.01780105068588628
 CONSIS -0.22782058111362183
 CONTR  -0.8094592237248102
 MEMBRAN-1.788173534959893
 AGE    -0.05285751197750732
 STRAT  -1.6650305527536942
 GRAVID  0.38324952943210994
 PARIT  -0.9463956993328745
 DIAB   0.18151162744507293
 TRANSF -0.7413500749909346
 GEMEL  1.5953124037323745

Hier ist das Ergebnis von R:

             Estimate Std. Error z value Pr(>|z|)   
(Intercept)  3.0682091  3.3944407   0.904 0.366052    
GEST         0.0086545  0.1494487   0.058 0.953821    
DILATE       0.4898586  0.2049361   2.390 0.016835 *  
EFFACE       0.0131834  0.0059331   2.222 0.026283 *  
CONSIS       0.1598426  0.2332670   0.685 0.493196    
CONTR        0.0008504  0.5788959   0.001 0.998828    
MEMBRAN     -1.5497870  0.4215416  -3.676 0.000236 ***   
AGE         -0.0420145  0.0326184  -1.288 0.197725    
STRAT       -0.3781365  0.5860476  -0.645 0.518777    
GRAVID       0.1866430  0.1522925   1.226 0.220366    
PARIT       -0.6493312  0.2357530  -2.754 0.005882 **  
DIAB         0.0335458  0.2163165   0.155 0.876760    
TRANSF      -0.6239330  0.3396592  -1.837 0.066219 .  
GEMEL        2.2767331  1.0995245   2.071 0.038391 *  
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1
SparkUser
quelle
1
Ich würde BFGS mit begrenztem Speicher nicht als "einfache logistische Regression" bezeichnen. Außer, ich denke, in dem Sinne, dass moderne Bibliotheken komplexe Techniken sehr zugänglich machen :)
nealmcb
Du hast recht. Kennen Sie eine Möglichkeit, BFGS mit begrenztem Speicher mit R zu implementieren?
SparkUser
Wenn Sie den Verdacht haben, dass dies etwas mit der Verlustfunktion csie.ntu.edu.tw/~cjlin/papers/spark-liblinear/… (Sec - IIIA) @SparkUser zu tun hat, können Sie LogisticRegressionWithLBFGS ohne die Standardeinstellungen ausführen und dann Vergleichen Sie die Koeffizienten mit dem Standardwert R - glm.
user45409

Antworten:

6

Ein kurzer Blick auf die Dokumente für LogisticRegressionWithLBFGS zeigt, dass standardmäßig Feature-Skalierung und L2-Regularisierung verwendet werden. Ich vermute, dass glmRs eine Maximum-Likelihood-Schätzung des Modells zurückgeben, während Spark's LogisticRegressionWithLBFGSeine regulierte Modellschätzung zurückgibt. Beachten Sie, dass die geschätzten Modellgewichte des Spark-Modells alle kleiner sind als die des R-Modells.

Ich bin nicht sicher, ob glmin R die Feature-Skalierung implementiert wird oder nicht , aber dies würde auch zu unterschiedlichen Modellwerten beitragen.

Ryan J. Smith
quelle
Ich bin nicht sicher, ob es möglich ist, die Feature-Skalierung in R zu verwenden. Ich kann sie nicht finden. Wissen Sie, wie Sie mit LBFGS eine logistische Regression durchführen, indem Sie R verwenden, um die beiden Modelle zu vergleichen?
SparkUser
Überprüfen Sie hier die Funktionsdokumentation glmnetaus glmnetPaket und Look und Parameter standardize http://cran.r-project.org/web/packages/glmnet/glmnet.pdf - es besteht auch die Möglichkeit, die Regularisierung zu verwenden
Marcin Kosiński