Processing math: 100%

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 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 POld(y=1)POld(y=0)=11 .

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

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

P(x|y=1,θ)P(x|y=0,θ)=11×POld(y=1|x,θ)POld(y=0|x,θ);

Ahora, imagine primero que sus nuevas probabilidades previas son sólo una estimación puntual, PNew(y=1)PNew(y=0)=π1π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:

PNew(y=1|x,θ)PNew(y=0|x,θ)=π1π0×POld(y=1|x,θ)POld(y=0|x,θ)

En su lugar, tiene una distribución sobre probabilidades a priori, P(y=1)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