scikit learn - guide - SGDClassifier con class_weight=auto falla en scikit-learn 0.15 pero no 0.14
scikit learn install (2)
Cuando entreno un scDCit-learn v0.15 SGDClassifier
con estas opciones: SGDClassifier(loss=''log'', class_weight=None, penalty=''l2'')
, el entrenamiento se completa sin ningún error. Sin embargo, cuando entreno este clasificador con class_weight=''auto''
en scikit-learn v0.15, obtengo este error:
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
¿Qué podría causarlo?
Como referencia, aquí está la documentación sobre class_weight
:
Preestablecido para el parámetro class_weight fit. Pesos asociados con las clases. Si no se da, se supone que todas las clases tienen peso uno. El modo "automático" usa los valores de y para ajustar automáticamente los pesos inversamente proporcionales a las frecuencias de la clase.
Creo que esto puede ser un error dentro de scikit-learn. Como solución alternativa, intente lo siguiente:
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))
Estoy trabajando en una solución en este PR:
https://github.com/scikit-learn/scikit-learn/pull/3515
Por favor, siéntase libre de probar e informar si resuelve el problema por usted.