Bài tập 2.2 về các yếu tố của học thống kê


10

Cuốn sách đầu tiên tạo ra một số dữ liệu 2 lớp thông qua:

nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây

cung cấp cho:

nhập mô tả hình ảnh ở đây

và sau đó nó hỏi:

nhập mô tả hình ảnh ở đây

Tôi cố gắng giải quyết điều này bằng cách mô hình hóa đầu tiên với mô hình đồ họa này:

nhập mô tả hình ảnh ở đây

Trong đó c là nhãn, h(1h10) là chỉ số của chọn trung bìnhmhc , vàx là điểm dữ liệu. Điều này sẽ cho

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

Mặt khác, ranh giới là . Với sự cai trị của Bayes, chúng ta có{x:Pr(c= =btôibạne|x)= =Pr(c= =ormộtnge|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)

Nhưng sau này tôi thấy rằng cài đặt vấn đề là đối xứng nên điều này có thể mang lại làm ranh giới. Nếu vấn đề là hỏi ranh giới khi được điều hòa, phương trình sẽ bao gồm tham số mà tôi nghĩ đó không phải là mục đích của bài tập.m c h 40x= =ymhc40

Vậy tôi có hiểu lầm gì không? Cảm ơn bạn.

Câu trả lời:


8

Tôi không nghĩ rằng bạn nên tìm một biểu thức phân tích cho ranh giới quyết định của Bayes, để nhận ra một . Tương tự, tôi nghi ngờ bạn phải có được ranh giới phân phối , vì đó chỉ là theo tính đối xứng như bạn đã lưu ý.m k x = ymkmkx= =y

Tôi nghĩ những gì bạn cần là hiển thị là một chương trình có thể tính toán ranh giới quyết định cho việc thực hiện nhất định của . Điều này có thể được thực hiện bằng cách thiết lập một lưới các giá trị và , tính toán mật độ có điều kiện của lớp và tìm các điểm mà chúng bằng nhau. x ymkxy

Mã này là một đâm vào nó. IIRC thực sự có mã để tính ranh giới quyết định trong Thống kê ứng dụng hiện đại với S , nhưng tôi chưa có tiện ích đó ngay bây giờ.

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


Kết quả:

nhập mô tả hình ảnh ở đây


3

Trên thực tế, cuốn sách không yêu cầu cung cấp một giải pháp phân tích vấn đề này. Và vâng, bạn phải xác định ranh giới, nhưng không phải trên 40 phương tiện: bạn không bao giờ có thể biết chính xác chúng. Thay vào đó, bạn phải dựa vào 200 điểm dữ liệu mà bạn có thể nhìn thấy. Vì vậy, bạn sẽ cần 200 tham số, nhưng do sử dụng tính tổng, nên câu trả lời không quá phức tạp.

Tôi sẽ không bao giờ có thể rút ra công thức này, vì vậy tôi chỉ lấy tín dụng để nhận ra rằng giải pháp phân tích không phải là xấu và sau đó tìm kiếm nó trên google. May mắn thay, nó được cung cấp bởi các tác giả một số người tốt, trang 6-7 .


2

Ước gì tôi vấp phải mã trên trước đó; chỉ cần hoàn thành việc tạo một số mã thay thế cho mỗi bên dưới ... cho những gì nó có giá trị

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")
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.