¿Cuál es la diferencia entre OneVsRestClassifier con SVC y SVC con decision_function_shape = ‘ovr’?

Pensé que debería ser el mismo, pero para el método decision_function() obtengo resultados diferentes. Y SVC con solo decision_function_shape='ovr' es realmente más rápido.

Relacionados: Scikit aprende clasificación de múltiples clases para máquinas de vectores de soporte

Obtuve algunas aclaraciones sobre la documentación de LinearSVC en el encabezado Ver también, donde se menciona SVC.

SVC

Implementación del clasificador de máquinas de vectores de soporte usando libsvm:

….

….

Además, el modo de clase múltiple SVC se implementa usando un esquema uno contra uno, mientras que LinearSVC usa uno frente al rest. Es posible implementar uno contra el rest con SVC utilizando el contenedor sklearn.multiclass.OneVsRestClassifier.

….

Además, SVC delega toda la capacitación a la biblioteca libsvm subyacente, que maneja el caso de múltiples clases como 'OvO' (incluso si la decision_function_shape = ‘ovr’).

Se menciona en el problema @delusionX mencionó que decision_function_shape es solo por compatibilidad con la API de scikit. Es más probable que todos los demás estimadores manejen la clase múltiple como OvR y, por lo tanto, cuando se usa SVC en combinación con otras cosas (como, por ejemplo, en un Pipeline, GridSearchCV, o envoltorios como OneVsRestClassifier), devolver una función de decisión OvO rompe el trabajo de otros. Pero no pude encontrar eso escrito explícitamente en ninguna parte.

Dato curioso : OneVsOneClassifier también devuelve una función de decisión que confirma con la forma de OvR.