Ejercicio 2.2 de Los elementos del aprendizaje estadístico

10

El libro de texto genera primero algunos datos de 2 clases a través de:

ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí

lo que da:

ingrese la descripción de la imagen aquí

y luego pregunta:

ingrese la descripción de la imagen aquí

Intento resolver esto modelando esto primero con este modelo gráfico:

ingrese la descripción de la imagen aquí

donde es la etiqueta, es el índice de la media seleccionada , y es el punto de datos. Esto darách(1h10)mhcx

Pr(xmhc)=N(mhc,I/5)Pr(mhch,c=blue)=N((1,0)T,I)Pr(mhch,c=orange)=N((0,1)T,I)Pr(h)=110Pr(c)=12

Por otro lado, el límite es . Con el dominio bayesiano, tenemos{x:Pr(c=bluex)=Pr(c=orangex)}

Pr(cx)=Pr(xc)Pr(c)cPr(xc)Pr(c)Pr(xc)=hmhcPr(h)Pr(mhch,c)Pr(xmhc)

Pero más tarde descubrí que la configuración del problema es simétrica, por lo que esto puede producir como límite. Si el problema es preguntar el límite cuando están condicionados, la ecuación incluirá parámetros, lo que creo que es poco probable que sea el propósito del ejercicio.x=ymhc40

Entonces, ¿estoy malinterpretando algo? Gracias.

ziyuang
fuente

Respuestas:

8

No creo que se deba encontrar una expresión analítica para el límite de decisión de Bayes, para una realización dada de los 's. Del mismo modo, dudo que se suponga que debe obtener el límite sobre la distribución de , ya que eso es solo por simetría, como notó.mkmkx=y

Creo que lo que necesita es mostrar un programa que pueda calcular el límite de decisión para una realización dada de los 's. Esto se puede hacer estableciendo una cuadrícula de valores e , calculando las densidades condicionales de clase y encontrando los puntos donde son iguales.mkxy

Este código es una puñalada. IIRC en realidad hay código para calcular el límite de decisión en las estadísticas aplicadas modernas con S , pero no lo tengo a mano en este momento.

# for dmvnorm/rmvnorm: multivariate normal distribution
library(mvtnorm)

# class-conditional density given mixture centers
f <- function(x, m)
{
    out <- numeric(nrow(x))
    for(i in seq_len(nrow(m)))
        out <- out + dmvnorm(x, m[i, ], diag(0.2, 2))
    out
}

# generate the class mixture centers
m1 <- rmvnorm(10, c(1,0), diag(2))
m2 <- rmvnorm(10, c(0,1), diag(2))
# and plot them
plot(m1, xlim=c(-2, 3), ylim=c(-2, 3), col="blue")
points(m2, col="red")

# display contours of the class-conditional densities
dens <- local({
    x <- y <- seq(-3, 4, len=701)
    f1 <- outer(x, y, function(x, y) f(cbind(x, y), m1))
    f2 <- outer(x, y, function(x, y) f(cbind(x, y), m2))
    list(x=x, y=y, f1=f1, f2=f2)
})

contour(dens$x, dens$y, dens$f1, col="lightblue", lty=2, levels=seq(.3, 3, len=10),
        labels="", add=TRUE)

contour(dens$x, dens$y, dens$f2, col="pink", lty=2, levels=seq(.3, 3, len=10),
        labels="", add=TRUE)

# find which points are on the Bayes decision boundary
eq <- local({
    f1 <- dens$f1
    f2 <- dens$f2
    pts <- seq(-3, 4, len=701)
    eq <- which(abs((dens$f1 - dens$f2)/(dens$f1 + dens$f2)) < 5e-3, arr.ind=TRUE)
    eq[,1] <- pts[eq[,1]]
    eq[,2] <- pts[eq[,2]]
    eq
})
points(eq, pch=16, cex=0.5, col="grey")


Resultado:

ingrese la descripción de la imagen aquí

Hong Ooi
fuente
3

En realidad, el libro no pedir para proporcionar una solución analítica a este problema. Y sí, tienes que condicionar el límite, pero no en los 40 medios: nunca los conoces con precisión. En su lugar, debe condicionar los 200 puntos de datos que puede ver. Por lo tanto, necesitará 200 parámetros, pero debido al uso de la sumatoria, la respuesta no parece demasiado complicada.

Nunca podría obtener esta fórmula, así que solo me doy el crédito de darme cuenta de que la solución analítica no tiene que ser fea y luego buscarla en Google. Afortunadamente, los autores proporcionan algunas personas agradables, páginas 6-7 .

max
fuente
2

Ojalá me topé con el código de arriba anteriormente; simplemente terminé creando un código alternativo a continuación ... para lo que vale

set.seed(1)
library(MASS)

#create original 10 center points/means for each class 
I.mat=diag(2)
mu1=c(1,0);mu2=c(0,1)
mv.dist1=mvrnorm(n = 10, mu1, I.mat)
mv.dist2=mvrnorm(n = 10, mu2, I.mat)

values1=NULL;values2=NULL

#create 100 observations for each class, after random sampling of a center point, based on an assumed bivariate probability distribution around each center point  
for(i in 1:10){
  mv.values1=mv.dist1[sample(nrow(mv.dist1),size=1,replace=TRUE),]
  sub.mv.dist1=mvrnorm(n = 10, mv.values1, I.mat/5)
  values1=rbind(sub.mv.dist1,values1)
}
values1

#similar as per above, for second class
for(i in 1:10){
  mv.values2=mv.dist2[sample(nrow(mv.dist2),size=1,replace=TRUE),]
  sub.mv.dist2=mvrnorm(n = 10, mv.values2, I.mat/5)
  values2=rbind(sub.mv.dist2,values2)
}
values2

#did not find probability function in MASS, so used mnormt
library(mnormt)

#create grid of points
grid.vector1=seq(-2,2,0.1)
grid.vector2=seq(-2,2,0.1)
length(grid.vector1)*length(grid.vector2)
grid=expand.grid(grid.vector1,grid.vector2)



#calculate density for each point on grid for each of the 100 multivariates distributions
prob.1=matrix(0:0,nrow=1681,ncol=10) #initialize grid
for (i in 1:1681){
  for (j in 1:10){
    prob.1[i,j]=dmnorm(grid[i,], mv.dist1[j,], I.mat/5)  
  }
}
prob.1
prob1.max=apply(prob.1,1,max)

#second class - as per above
prob.2=matrix(0:0,nrow=1681,ncol=10) #initialize grid
for (i in 1:1681){
  for (j in 1:10){
    prob.2[i,j]=dmnorm(grid[i,], mv.dist2[j,], I.mat/5)  
  }
}
prob.2
prob2.max=apply(prob.2,1,max)

#bind
prob.total=cbind(prob1.max,prob2.max)
class=rep(1,1681)
class[prob1.max<prob2.max]=2
cbind(prob.total,class)

#plot points
plot(grid[,1], grid[,2],pch=".", cex=3,col=ifelse(class==1, "coral", "cornflowerblue"))

points(values1,col="coral")
points(values2,col="cornflowerblue")

#check - original centers
# points(mv.dist1,col="coral")
# points(mv.dist2,col="cornflowerblue")
usuario1885116
fuente