İstatistiksel Öğrenme Unsurlarının Alıştırma 2.2


10

Ders kitabı ilk önce şu 2 sınıftan bazı veriler üretir:

resim açıklamasını buraya girin resim açıklamasını buraya girin

hangi verir:

resim açıklamasını buraya girin

ve sonra soruyor:

resim açıklamasını buraya girin

Bunu ilk olarak bu grafik model ile modelleyerek bunu çözmeye çalışıyorum:

resim açıklamasını buraya girin

nerede c etiket, h(1h10) seçilen ortalamanın endeksidir mhc, ve xveri noktasıdır. Bu verecek

Pr(x|mhc)=N-(mhc,ben/5)Pr(mhc|h,c=blue)=N-((1,0)T,ben)Pr(mhc|h,c=Örbirnge)=N-((0,1)T,ben)Pr(h)=110Pr(c)=12

Öte yandan, sınır . Bayes kuralı ile,{x:Pr(c=blue|x)=Pr(c=Örbirnge|x)}

Pr(c|x)=Pr(x|c)Pr(c)ΣcPr(x|c)Pr(c)Pr(x|c)=ΣhmhcPr(h)Pr(mhc|h,c)Pr(x|mhc)

Ancak daha sonra, problem ayarının simetrik olduğunu gördüm, böylece bu sınır olarak verebilir . Sorun koşullandırıldığında sınır soruyorsa , denklemx=ymhc40 , alıştırmanın amacı olması muhtemel olmadığını düşündüğüm parametre .

Yani bir şeyi yanlış mı anlıyorum? Teşekkür ederim.

Yanıtlar:


8

Bayes karar sınırı için, belirli bir gerçekleşmesi için analitik bir ifade bulmanız gerektiğini sanmıyorum . Benzer şekilde, dağılımı üzerindeki sınırı almanız gerektiğinden , çünkü bu sadecemkmkx=y belirttiğiniz gibi simetri ile .

İhtiyacınız olan şey , belirli bir gerçekleştirilmesi için karar sınırını hesaplayabilen bir program olduğunu düşünüyorum . Bu, ve değerlerinin bir ızgarasını ayarlayarak , sınıf koşullu yoğunluklarını hesaplayarak ve eşit oldukları noktaları bularak yapılabilir.mkxy

Bu kod bir bıçak. IIRC aslında Modern Uygulamalı İstatistik'teki karar sınırını S ile hesaplamak için kod var, ama şu anda bu kadar kullanışlı değilim.

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


Sonuç:

resim açıklamasını buraya girin


3

Aslında kitap yok bu soruna analitik çözüm sağlamak istiyoruz. Ve evet, sınırı şartlandırmalısınız, ancak 40 araçla değil: onları asla tam olarak tanımıyorsunuz. Bunun yerine, gördüğünüz 200 veri noktasını koşullandırmanız gerekir. Yani 200 parametreye ihtiyacınız olacak, ancak toplamın kullanılması nedeniyle cevap çok karmaşık görünmüyor.

Bu formülü asla elde edemeyeceğim, bu yüzden sadece analitik çözümün çirkin olması gerekmediğini fark edip krediyi Google'da aradığım için aldım. Neyse ki, yazarlar tarafından bazı güzel insanlar, sayfa 6-7 sağlanır .


2

Keşke yukarıda kod başına tökezledi; sadece aşağıda bir alternatif kod oluşturmak için finsihed ...

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")
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.