2014-07-17 7 views
5

Kiedy trenuję scikit-learn v0.15 SGDClassifier z tymi opcjami: SGDClassifier(loss='log', class_weight=None, penalty='l2'), treningi kończą się bez błędów. Jednak kiedy pociąg ten klasyfikator z class_weight='auto' na scikit-learn v0.15, otrzymuję ten błąd:SGDClassifier z class_weight = auto fail na scikit-learn 0.15 ale nie 0.14

return self.model.fit(X, y) 
    File "/home/rose/.local/lib/python2.7/site-packages/scikit_learn-0.15.0b1-py2.7-linux-x86_64.egg/sklearn/linear_model/stochastic_gradient.py", line 485, in fit 
    sample_weight=sample_weight) 
    File "/home/rose/.local/lib/python2.7/site-packages/scikit_learn-0.15.0b1-py2.7-linux-x86_64.egg/sklearn/linear_model/stochastic_gradient.py", line 389, in _fit 
    classes, sample_weight, coef_init, intercept_init) 
    File "/home/rose/.local/lib/python2.7/site-packages/scikit_learn-0.15.0b1-py2.7-linux-x86_64.egg/sklearn/linear_model/stochastic_gradient.py", line 336, in _partial_fit 
    y_ind) 
    File "/home/rose/.local/lib/python2.7/site-packages/scikit_learn-0.15.0b1-py2.7-linux-x86_64.egg/sklearn/utils/class_weight.py", line 43, in compute_class_weight 
    raise ValueError("classes should have valid labels that are in y") 
ValueError: classes should have valid labels that are in y 

Co może spowodować, że?

Dla porównania, tutaj jest dokumentacja na class_weight:

Preset for the class_weight fit parameter. Weights associated with classes. If not given, all classes are supposed to have weight one. The “auto” mode uses the values of y to automatically adjust weights inversely proportional to class frequencies.

+0

Czy używasz tej samej wersji nauki w systemie OS X? Wersja 0.15 właśnie została wydana, może mógłbyś spróbować na tym. Jeśli błąd będzie się powtarzał, tzn. Ten sam kod spowoduje błąd w linux ec2, a nie w macosx, powinieneś rozważyć zgłoszenie tego na listę mailingową scikit-learn. – eickenberg

+0

Używam wersji 0.15. –

+1

Patrząc na swój system śledzenia, korzystasz z wersji beta1, a nie wersji 0.15 – eickenberg

Odpowiedz

3

myślę, że może to być błąd w ciągu scikit-learn. W pracy wokół, spróbuj wykonać następujące czynności:

from sklearn.preprocessing import LabelEncoder 
le = LabelEncoder() 
y_encoded = le.fit_transform(y) 
self.model.fit(X, y_encoded) 
pred = le.inverse_transform(self.model.predict(X))