¿Cuál es la diferencia entre el peso de la clase = ninguno y el auto en svm scikit learn?

En scikit learn svm classifier cuál es la diferencia entre class_weight = None y class_weight = Auto.

A partir de la documentación se entrega como

Establezca el parámetro C de la clase i en class_weight [i] * C para SVC. Si no se da, todas las clases se supone que tienen un peso uno. El modo ‘automático’ utiliza los valores de y para ajustar automáticamente los pesos de forma inversamente proporcional a las frecuencias de clase.

class sklearn.svm.SVC(C=1.0, kernel='rbf', degree=3, gamma=0.0, coef0=0.0, shrinking=True, probability=False, tol=0.001, cache_size=200, class_weight=None, verbose=False, max_iter=-1, random_state=None) 

Pero ¿cuál es la ventaja de utilizar el modo automático. No pude entender su implementación.

Esto tiene lugar en el archivo class_weight.py :

 elif class_weight == 'auto': # Find the weight of each class as present in y. le = LabelEncoder() y_ind = le.fit_transform(y) if not all(np.in1d(classes, le.classes_)): raise ValueError("classes should have valid labels that are in y") # inversely proportional to the number of samples in the class recip_freq = 1. / bincount(y_ind) weight = recip_freq[le.transform(classes)] / np.mean(recip_freq) 

Esto significa que cada clase que tenga (en classes ) obtiene un peso igual a 1 dividido por el número de veces que esa clase aparece en sus datos ( y ), por lo que las clases que aparecen con mayor frecuencia obtendrán pesos más bajos. Esto luego se divide por la media de todas las frecuencias de clase inversa.

La ventaja es que ya no tiene que preocuparse por establecer los pesos de clase: esto ya debería ser bueno para la mayoría de las aplicaciones.

Si mira arriba en el código fuente, para None , el weight se llena con unos, por lo que cada clase tiene el mismo peso.

Esta es una publicación bastante antigua, pero para todos aquellos que se han encontrado con este problema, tenga en cuenta que class_weight == ‘auto’ ha quedado en desuso en la versión 0.17. Utilice class_weight == ‘equilibrado’ en su lugar.

http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html

Esto se implementa de la siguiente manera:

n_samples / (n_classes * np.bincount (y))

¡Aclamaciones!