แบบฝึกหัดที่ 2.2 ขององค์ประกอบของการเรียนรู้ทางสถิติ


10

หนังสือเรียนจะสร้างข้อมูล 2 ระดับก่อนผ่าน:

ป้อนคำอธิบายรูปภาพที่นี่ ป้อนคำอธิบายรูปภาพที่นี่

ซึ่งจะช่วยให้:

ป้อนคำอธิบายรูปภาพที่นี่

แล้วมันจะถามว่า:

ป้อนคำอธิบายรูปภาพที่นี่

ฉันพยายามที่จะแก้ปัญหานี้โดยการสร้างแบบจำลองนี้ครั้งแรกด้วยโมเดลกราฟิกนี้:

ป้อนคำอธิบายรูปภาพที่นี่

ที่ไหน c คือฉลาก h(1h10) คือดัชนีของค่าเฉลี่ยที่เลือก mhcและ xเป็นจุดข้อมูล นี้จะให้

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

ในทางตรงกันข้ามเขตแดนเป็น\} ด้วยกฎของเบย์เรามี{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)

แต่ต่อมาฉันพบว่าการตั้งค่าปัญหานั้นสมมาตรดังนั้นนี่อาจทำให้เป็นขอบเขต หากปัญหาถามขอบเขตเมื่อถูกต้องสมการจะรวมพารามิเตอร์ที่ฉันคิดว่ามันไม่น่าจะเป็นจุดประสงค์ของการฝึกx=ymhc40

ดังนั้นฉันจึงเข้าใจผิดอะไร ขอบคุณ.

คำตอบ:


8

ผมไม่คิดว่าคุณควรจะพบการแสดงออกสำหรับการวิเคราะห์ขอบเขตการตัดสินใจของเบส์สำหรับการสำนึกได้รับของ 's ในทำนองเดียวกันฉันสงสัยว่าคุณควรจะได้รับขอบเขตเหนือการกระจายของเนื่องจากเป็นเพียงโดยสมมาตรตามที่คุณสังเกตmkmkx=y

ผมคิดว่าสิ่งที่คุณต้องการก็คือการแสดงเป็นโปรแกรมที่สามารถคำนวณขอบเขตการตัดสินใจสำหรับการก่อให้เกิดได้รับของ 's สิ่งนี้สามารถทำได้โดยการตั้งค่ากริดของค่าและคำนวณความหนาแน่นของคลาสตามเงื่อนไขและค้นหาจุดที่มีค่าเท่ากันmkxy

รหัสนี้ถูกแทงที่มัน IIRC มีรหัสเพื่อคำนวณขอบเขตการตัดสินใจในสถิติประยุกต์สมัยใหม่กับ Sแต่ตอนนี้ฉันไม่ได้มีประโยชน์

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


ผลลัพธ์:

ป้อนคำอธิบายรูปภาพที่นี่


3

จริงๆแล้วหนังสือเล่มนี้จะขอให้แก้ปัญหาการวิเคราะห์ปัญหานี้ และใช่คุณต้องกำหนดขอบเขต แต่ไม่ใช่ใน 40 หมายความว่า: คุณไม่เคยรู้จักพวกเขาอย่างแม่นยำ แต่คุณต้องกำหนดจุดข้อมูล 200 จุดที่จะได้เห็น ดังนั้นคุณจะต้องมีพารามิเตอร์ 200 ตัว แต่เนื่องจากการใช้ผลรวมคำตอบนั้นดูไม่ซับซ้อนเกินไป

ฉันไม่สามารถหาสูตรนี้ได้ดังนั้นฉันจึงขอเครดิตเพียงแค่รับรู้ว่าโซลูชันการวิเคราะห์ไม่จำเป็นต้องอัปลักษณ์แล้วค้นหาใน google โชคดีที่มันมีให้โดยผู้เขียนคนบางคนที่มีความสุข, หน้า 6-7


2

หวังว่าฉันสะดุดกับรหัสต่อไปข้างต้นก่อนหน้านี้; เพิ่งเสร็จสิ้นการสร้างรหัสทางเลือกบางอย่างต่อไปนี้ ... สำหรับสิ่งที่คุ้มค่า

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")
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.