5 votos

Combinación de priores de clase con métodos discriminativos

Digamos que queremos construir un clasificador para un problema de clasificación binaria utilizando un discriminativo método (por ejemplo, SVM) y poder imponer un anterior en las clases.

Por ejemplo, supongamos que queremos utilizar la prior $\text{Beta}(10,50)$ en la clase positiva.

¿Cómo puedo estimar el posterior probabilidad de clasificación resultante de combinar la salida de mi predictor discriminativo con la anterior clase?

1voto

Shane Oliver Puntos 126

Voy a suponer que ha entrenado su clasificador utilizando el mismo número de muestras donde $y=0$ y $y=1$ es decir, con un previo implícito de que $\frac{P_{Old}(y=1)}{P_{Old}(y=0)} = \frac{1}{1}$ .

También supondré que su clasificador hace predicciones probabilísticas sobre $P_{Old}(y=1|x, \theta)$ donde $x$ son los datos a predecir y $\theta$ son los parámetros/vectores de soporte entrenados. Resulta útil representar estas predicciones como odds ratios, $\frac{P_{Old}(y=1|x, \theta)}{P_{Old}(y=0|x, \theta)}$ .

Para obtener las probabilidades posteriores dada su nueva prior, tenemos que encontrar la razón de verosimilitud, $\frac{P(x|y=1, \theta)}{P(x|y=0, \theta)}$ . Dado que sus antiguas probabilidades anteriores eran $\frac{1}{1}$ , el cociente de probabilidades es el mismo que el cociente de probabilidades de tu antigua predicción:

$$ \tag{1} \frac{P(x|y=1, \theta)}{P(x|y=0, \theta)} = \frac{1}{1} \times \frac{P_{Old}(y=1|x, \theta)}{P_{Old}(y=0|x, \theta)}; $$

Ahora, imagine primero que sus nuevas probabilidades previas son sólo una estimación puntual, $\frac{P_{New}(y=1)}{P_{New}(y=0)} = \frac{\pi_1}{\pi_0}$ . Sus nuevas probabilidades posteriores son simplemente las nuevas probabilidades anteriores multiplicado por la razón de verosimilitud, que es también la predicción de su SVM:

$$ \tag{2} \frac{P_{New}(y=1|x, \theta)}{P_{New}(y=0|x, \theta)} = \frac{\pi_1}{\pi_0} \times \frac{P_{Old}(y=1|x, \theta)}{P_{Old}(y=0|x, \theta)} $$

En su lugar, tiene una distribución sobre probabilidades a priori, $P(y=1) \sim \text{Beta}(\alpha, \beta)$ . Hay varias formas de obtener la posterior correspondiente, pero la más sencilla es muestrear las probabilidades de clase a partir de la anterior, convertirlas en probabilidades y multiplicarlas por la probabilidad para obtener muestras de la probabilidad posterior. Alternativamente, se puede calcular la densidad sobre una rejilla de probabilidades a priori, y transformar apropiadamente para encontrar las correspondientes probabilidades a posteriori. El código siguiente muestra ambos enfoques.

library(magrittr)
odds2prob = function(o) o / (1 + o)
prob2odds = function(p) p / (1 - p)

old.prior.odds = 1/1
svm.posterior.prob = .8 # P(y=1)
svm.posterior.odds = prob2odds(svm.posterior.prob) # = 4/1
likelihood.ratio = svm.posterior.odds / old.prior.odds # Also = 4/1

# New odds point estimate
new.prior.odds = 1/3
new.posterior.odds = new.prior.odds * likelihood.ratio # 4/1 * 1/3 = 4/3
new.posterior.odds

# Samples from posterior
prior.prob.samps = rbeta(1000, 10, 20)
prior.odds.samps = prob2odds(prior.prob.samps)
new.posterior.odds.samps = prior.odds.samps * likelihood.ratio
# Take the mean of the log odds to Normalise the distribution
new.posterior.prediction = new.posterior.odds.samps %>% log() %>% mean() %>% exp() %>% odds2prob()
new.posterior.prediction # ~0.66

# Calculate over grid
probs = seq(0.001, .999, .01)
density = dbeta(probs, 10, 20)

odds = prob2odds(probs)
plot(probs, density, main='Prior density', xlab = 'P(y=1)')
plot(odds2prob(odds * likelihood.ratio), density, 
     main='Posterior density', xlab = 'P(y=1)')

enter image description here enter image description here

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X