Latihan 2.2 dari Elemen Pembelajaran Statistik


10

Buku teks pertama menghasilkan beberapa data 2 kelas melalui:

masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini

pemberian yang mana:

masukkan deskripsi gambar di sini

dan kemudian ia bertanya:

masukkan deskripsi gambar di sini

Saya mencoba menyelesaikan ini dengan terlebih dahulu memodelkan ini dengan model grafis ini:

masukkan deskripsi gambar di sini

di mana adalah label, adalah indeks dari mean yang dipilih , dan adalah titik data. Ini akan memberich(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

Di sisi lain, batasnya adalah . Dengan aturan Bayesian, kita punya{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)

Tetapi kemudian saya menemukan bahwa pengaturan masalah simetris sehingga ini dapat menghasilkan sebagai batas. Jika masalah menanyakan batas ketika dikondisikan, persamaannya akan mencakup parameter yang saya pikir tidak mungkin menjadi tujuan latihan.m c h 40x=ymhc40

Jadi, apakah saya salah memahami sesuatu? Terima kasih.

Jawaban:


8

Saya tidak berpikir Anda seharusnya menemukan ekspresi analitik untuk batas keputusan Bayes, untuk realisasi yang diberikan dari . Demikian pula saya ragu Anda seharusnya mendapatkan batas atas distribusi , karena itu hanya oleh simetri seperti yang Anda catat.mkmkx=y

Saya pikir yang Anda butuhkan adalah menunjukkan program yang dapat menghitung batas keputusan untuk realisasi yang diberikan dari . Ini dapat dilakukan dengan meletakkan kisi-kisi nilai dan , menghitung kepadatan kelas-kondisional, dan menemukan titik di mana mereka sama. x ymkxy

Kode ini menusuk itu. IIRC sebenarnya ada kode untuk menghitung batas keputusan dalam Statistik Terapan Modern dengan S , tapi saya belum punya yang berguna sekarang.

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


Hasil:

masukkan deskripsi gambar di sini


3

Sebenarnya, buku ini memang meminta untuk memberikan solusi analitis untuk masalah ini. Dan ya, Anda harus mengkondisikan batas, tetapi tidak pada 40 berarti: Anda tidak pernah mengenal mereka secara tepat. Sebaliknya Anda harus mengkondisikan pada 200 poin data yang Anda bisa lihat. Jadi Anda akan membutuhkan 200 parameter, tetapi karena penggunaan penjumlahan, jawabannya tidak terlihat terlalu rumit.

Saya tidak akan pernah dapat memperoleh formula ini, jadi saya hanya mengambil kredit untuk menyadari bahwa solusi analitis tidak harus jelek dan kemudian mencarinya di google. Untungnya, ini diberikan oleh penulis beberapa orang baik, halaman 6-7 .


2

Berharap saya menemukan kode per di atas sebelumnya; hanya finsihed membuat beberapa kode alternatif di bawah ... untuk apa nilainya

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")
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.