Übung 2.2 der Elemente des statistischen Lernens

10

Das Lehrbuch generiert zunächst einige 2-Klassen-Daten über:

Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein

was gibt:

Geben Sie hier die Bildbeschreibung ein

und dann fragt es:

Geben Sie hier die Bildbeschreibung ein

Ich versuche dies zu lösen, indem ich dies zuerst mit diesem grafischen Modell modelliere:

Geben Sie hier die Bildbeschreibung ein

Dabei ist die Bezeichnung, der Index des ausgewählten Mittelwerts und der Datenpunkt. Dies wird gebenhcm 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

Andererseits ist die Grenze . Mit der Bayes'schen Herrschaft haben wir{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)

Aber später fand ich heraus, dass die Problemeinstellung symmetrisch ist, so dass dies als Grenze ergeben kann. Wenn das Problem die Grenze fragt, wenn konditioniert wird, enthält die Gleichung Parameter, von denen ich denke, dass es unwahrscheinlich ist, dass dies der Zweck der Übung ist.m c h 40x=ymhc40

Also verstehe ich irgendetwas falsch? Vielen Dank.

Ziyuang
quelle

Antworten:

8

Ich denke nicht, dass Sie einen analytischen Ausdruck für die Bayes-Entscheidungsgrenze finden sollten, für eine gegebene Realisierung der . Ebenso bezweifle ich, dass Sie die Grenze über die Verteilung von , da dies, wie Sie bemerkt haben , nur durch Symmetrie ist.m k x = ymkmkx=y

Ich denke, was Sie zeigen müssen, ist ein Programm , das die Entscheidungsgrenze für eine gegebene Realisierung der berechnen kann . Dies kann erreicht werden, indem ein Raster mit und Werten festgelegt, die klassenbedingten Dichten berechnet und die Punkte ermittelt werden, an denen sie gleich sind. x ymkxy

Dieser Code ist ein Stich. IIRC Es gibt tatsächlich Code zum Berechnen der Entscheidungsgrenze in Modern Applied Statistics mit S , aber ich habe das momentan nicht zur Hand.

# 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")


Ergebnis:

Geben Sie hier die Bildbeschreibung ein

Hong Ooi
quelle
3

Tatsächlich fordert das Buch eine analytische Lösung für dieses Problem. Und ja, man muss die Grenze konditionieren, aber nicht auf die 40 Mittel: man lernt sie nie genau kennen. Stattdessen müssen Sie die 200 Datenpunkte konditionieren, die Sie sehen können. Sie benötigen also 200 Parameter, aber aufgrund der Verwendung der Summierung sieht die Antwort nicht allzu kompliziert aus.

Ich würde diese Formel niemals ableiten können, daher nehme ich nur die Anerkennung dafür, dass die analytische Lösung nicht hässlich sein muss, und suche sie dann bei Google. Zum Glück ist es , bereitgestellt durch die Autoren einige nette Leute, Seiten 6-7 .

max
quelle
2

Ich wünschte, ich wäre früher auf den oben genannten Code gestoßen. Ich habe gerade einen alternativen Code per unten erstellt ... für das, was es wert ist

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")
user1885116
quelle