2016-06-17 3 views
3

Ich benutze einen gleichen Datensatz, um logistische Regressionsmodell sowohl in R und Python Sklearn zu trainieren. Der Datensatz ist nicht ausgeglichen. Und ich finde, dass der Auc ganz anders ist. Diese ist der Code, der Python:Warum der Auc ist so anders als logistische Regression von Sklearn und R

model_logistic = linear_model.LogisticRegression() #auc 0.623 
model_logistic.fit(train_x, train_y) 
pred_logistic = model_logistic.predict(test_x) #mean:0.0235 var:0.023 
print "logistic auc: ", sklearn.metrics.roc_auc_score(test_y,pred_logistic) 

Dies ist der Code von R:

glm_fit <- glm(label ~ watch_cnt_7 + bid_cnt_7 + vi_cnt_itm_1 + 
ITEM_PRICE + add_to_cart_cnt_7 + offer_cnt_7 +  
dwell_dlta_4to2 + 
vi_cnt_itm_2 + asq_cnt_7 + watch_cnt_14to7 + dwell_dlta_6to4 + 
auct_type + vi_cnt_itm_3 + vi_cnt_itm_7 + vi_dlta_4to2 + 
vi_cnt_itm_4 + vi_dlta_6to4 + tenure + sum_SRCH_item_7 + 
vi_cnt_itm_6 + dwell_itm_3 + 
offer_cnt_14to7 + # 
dwell_itm_2 + dwell_itm_6 + CNDTN_ROLLUP_ID + 
dwell_itm_5 + dwell_itm_4 + dwell_itm_1+ 
bid_cnt_14to7 + item_prchsd_cnt_14to7 + # 
dwell_itm_7 + median_day_rate + vb_ratio 
, data = train, family=binomial()) 
p_lm<-predict(glm_fit, test[1:nc-1],type = "response") 
pred_lm <- prediction(p_lm,test$label) 
auc <- performance(pred_lm,'auc')@y.values 

Der AUC-Wert von 0,623 Python ist, während der R 0,887 ist. Also ich möchte wissen, was mit der sklearn logistischen Regression falsch ist und wie man es beheben kann. Vielen Dank.

+2

für eine, '1: nc-1' ist falsch – rawr

+0

Dieser Fehler wird nicht viel ausmachen. 1: nc-1 ist dasselbe wie 0: (nc-1), was als eine Auswahl äquivalent zu 1: (nc-1) ist. – nograpes

+0

Es wäre hilfreich, wenn Sie ein kleines reproduzierbares Beispiel erstellt hätten. Zum Beispiel könnten Sie eine kleine einfache Datenmenge in R erstellen, die Sie dann sowohl in Python als auch in R lesen und ausführen. Außerdem wäre es hilfreich zu bestätigen, dass die Koeffizienten der logistischen Regression in beiden Modellen gleich waren. – nograpes

Antwort

1

Im Python-Skript sollten Sie predict_proba verwenden, um die Wahrscheinlichkeitsschätzungen für beide Klassen abzurufen, und die zweite Spalte für die positive Klasse als Eingabe für roc_auc_score nehmen, da die ROC-Kurve durch Variieren der Wahrscheinlichkeitsschwellenwerte grafisch dargestellt wird.

pred_logistic = model_logistic.predict_proba(test_x)[:,1] 
+0

Vielen Dank für Ihre Antwort und die Auc Sklearn Return ist 0,90 höher als Rs Glm. Ich möchte auch Rat von Ihnen suchen, dass die Varianzen der Parameter, die in das logistische Modell von slearn gesetzt werden, einen großen Unterschied auf dem Ergebnis wie auc machen? Danke vielmals. – yanachen

+0

@yanachen, Es gibt ein paar Parameter in [LogisticRegression] (http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html). Ich schlage vor, dass Sie "penalty", "C" und "class_weight" einstellen. Auch die Skalierung Ihrer Features kann bei linearen Modellen einen Unterschied ausmachen. –

Verwandte Themen