python - support - svc machine learning
¿Cómo funciona sklearn.svm.svc la función predict_proba() internamente? (2)
Estoy usando sklearn.svm.svc de scikit-learn para hacer una clasificación binaria. Estoy usando su función predic_proba () para obtener estimaciones de probabilidad. ¿Alguien puede decirme cómo predict_proba () calcula internamente la probabilidad?
En realidad, encontré una respuesta ligeramente diferente que usaban este código para convertir el valor de decisión en probabilidad
''double fApB = decision_value*A+B;
if (fApB >= 0)
return Math.exp(-fApB)/(1.0+Math.exp(-fApB));
else
return 1.0/(1+Math.exp(fApB)) ;''
Aquí los valores A y B se pueden encontrar en el archivo de modelo (probA y probB). Ofrece una forma de convertir la probabilidad al valor de decisión y, por lo tanto, a la pérdida de bisagra.
Usa ese ln (0) = -200.
Scikit-learn utiliza LibSVM internamente, y esto, a su vez, utiliza la escala de Platt , tal como se detalla en esta nota de los autores de LibSVM , para calibrar la SVM y generar probabilidades además de las predicciones de clase.
El escalado de Platt requiere primero entrenar el SVM como de costumbre, luego optimizar los vectores de parámetros A y B de manera tal que
P(y|X) = 1 / (1 + exp(A * f(X) + B))
donde f(X)
es la distancia con signo de una muestra desde el hiperplano (método de decision_function
-función de scikit-learn). Puede reconocer el sigmoide logístico en esta definición, la misma función que utilizan la regresión logística y las redes neuronales para convertir las funciones de decisión en estimaciones de probabilidad.
Tenga en cuenta que: el parámetro B
, el "intercepto" o "sesgo" o lo que quiera llamarlo, puede hacer que las predicciones basadas en las estimaciones de probabilidad de este modelo sean inconsistentes con las que obtiene de la función de decisión SVM f
. Por ejemplo, supongamos que f(X) = 10
, entonces la predicción para X
es positiva; pero si B = -9.9
y A = 1
, entonces P(y|X) = .475
. Estoy sacando estos números de la nada, pero has notado que esto puede ocurrir en la práctica.
Efectivamente, la escala de Platt entrena un modelo de probabilidad sobre las salidas de la SVM bajo una función de pérdida de entropía cruzada. Para evitar que este modelo se sobreajuste, utiliza una validación cruzada interna de cinco partes, lo que significa que entrenar SVM con probability=True
puede ser mucho más costoso que una SVM no probabilística y vana.