2015-04-18 5 views
9

Wir haben unser Sklearn von dem alten 0,13-Git auf 0,14.1 aufgerüstet und fanden heraus, dass sich die Leistung unseres logistischen Regressionsklassifikators ziemlich geändert hat. Die beiden Klassifizierer, die mit denselben Daten trainiert werden, haben unterschiedliche Koeffizienten und ergeben daher oft unterschiedliche Klassifikationsergebnisse.Verschiedene Versionen von Sklearn geben ziemlich unterschiedliche Trainingsergebnisse

Als Experiment verwendete I 5 Datenpunkte (high dimensional) die LR-Klassifikator zu trainieren, und die Ergebnisse sind:

0,13-git:

clf.fit(data_test.data, y) 
LogisticRegression(C=10, class_weight='auto', dual=False, fit_intercept=True, 
intercept_scaling=1, penalty='l2', tol=0.0001) 
np.sort(clf.coef_) 
array([[-0.12442518, -0.11137502, -0.11137502, ..., 0.05428562, 
0.07329358, 0.08178794]]) 

0.14.1:

clf1.fit(data_test.data, y) 
LogisticRegression(C=10, class_weight='auto', dual=False, fit_intercept=True, 
intercept_scaling=1, penalty='l2', random_state=None, tol=0.0001) 
np.sort(clf1.coef_) 
array([[-0.11702073, -0.10505662, -0.10505662, ..., 0.05630517, 
0.07651478, 0.08534311]]) 

Ich würde sagen, der Unterschied ist ziemlich groß, im Bereich von 10^(- 2). Offensichtlich sind die Daten, die ich hier verwendet, nicht ideal, weil die Dimensionalität der Merkmale viel größer ist als die Anzahl der Einträge. In der Praxis ist dies jedoch häufig der Fall. Hat es etwas mit der Auswahl von Features zu tun? Wie kann ich die Ergebnisse so machen wie zuvor? Ich verstehe, dass die neuen Ergebnisse nicht unbedingt schlechter sind als vorher, aber jetzt liegt der Fokus darauf, sie so konsistent wie möglich zu machen. Danke.

+1

In Ihrer 0.13.1 haben Sie nicht 'random_state = None', ist das ein Tippfehler? – EdChum

+0

Version 0.13 hat diesen Parameter nicht. In 0.14.1 habe ich auch versucht, random_state = 0 zu setzen, und das Ergebnis ist dasselbe wie random_state = None. – ymeng

+0

Es lohnt sich, die Dokumente zu überprüfen, da es manchmal Bugfixes in verschiedenen Versionen gibt. – EdChum

Antwort

2

Hier ist ein Kommentar über die Freigabe 0,13 von der what's new Seite:

Fixed class_weight support in svm.LinearSVC and linear_model.LogisticRegression 
by Andreas Müller. The meaning of class_weight was reversed as erroneously 
higher weight meant less positives of a given class in earlier releases. 

jedoch die Beschreibung des Update für die Version 0.13, nicht etwa eine höhere Version. Sie erwähnen, dass Sie die Version 0.13-git verwendet haben, vielleicht haben Sie eine Vorabversion der Version 0.13 verwendet, in der das Feature nicht bearbeitet wurde: Auf diese Weise könnte das Update relativ zu Ihrem Problem sinnvoll sein.

Wenn Sie Ihre Koeffizienten betrachten, sind sie in der neuen Version niedriger, was mit der Beschreibung des Updates, die besagt, dass die Gewichte ursprünglich gesenkt wurden, ein wenig Sinn ergibt.

Sie könnten Ihre neuen LogisticRegression(...) Parameter ändern und versuchen, die Dinge ein wenig anzupassen.