Esercizio 2.2 di Gli elementi dell'apprendimento statistico


10

Il libro di testo genera prima alcuni dati di 2 classi tramite:

inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine

che dà:

inserisci qui la descrizione dell'immagine

e poi chiede:

inserisci qui la descrizione dell'immagine

Cerco di risolverlo modellando prima questo con questo modello grafico:

inserisci qui la descrizione dell'immagine

dove è l'etichetta, è l'indice della media selezionata e è il punto dati. Questo daràhcm c h xh(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

D'altra parte, il limite è . Con il dominio bayesiano, abbiamo{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)

Ma più tardi ho scoperto che l'impostazione del problema è simmetrica, quindi questo può produrre come limite. Se il problema è chiedere il limite quando è condizionato, l'equazione includerà parametri che penso sia improbabile essere lo scopo dell'esercizio.m c h 40x=ymhc40

Quindi sto fraintendendo qualcosa? Grazie.

Risposte:


8

Non credo che dovresti trovare un'espressione analitica per il confine decisionale di Bayes, per una data realizzazione di . Allo stesso modo dubito che dovresti ottenere il limite sulla distribuzione di , dato che è solo per simmetria, come hai notato.m k x = ymkmkx=y

Penso che ciò di cui hai bisogno sia mostrare un programma in grado di calcolare il limite di decisione per una data realizzazione di . Questo può essere fatto impostando giù una griglia di e valori, calcolando le densità di classe-condizionale, e trovare i punti in cui sono uguali. x ymkxy

Questo codice è una pugnalata. IIRC in realtà esiste un codice per calcolare il limite decisionale in Modern Applied Statistics con S , ma non ho ancora trovato utile in questo 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")


Risultato:

inserisci qui la descrizione dell'immagine


3

In realtà, il libro non chiede di fornire una soluzione analitica a questo problema. E sì, devi condizionare il confine, ma non sui 40 mezzi: non li conosci mai esattamente. Invece devi condizionare i 200 punti dati che puoi vedere. Quindi avrai bisogno di 200 parametri, ma a causa dell'uso della somma, la risposta non sembra troppo complicata.

Non sarei mai in grado di ricavare questa formula, quindi mi prendo il merito solo per rendermi conto che la soluzione analitica non deve essere brutta e quindi cercarla su google. Fortunatamente, gli autori hanno fornito delle persone simpatiche, pagine 6-7 .


2

Vorrei che mi sono imbattuto nel codice sopra sopra; appena finito di creare un codice alternativo per sotto ... per quello che 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")
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.