R 중선형 식별 문제의 확률 생성 모델

18720 단어 RPRML
PRML 그림 4.10과 마찬가지로 그림은 두 종류의 조건 확률 밀도(각각 같은 협방차 행렬을 가진 2차원 정적 분포)를 나타내고 이러한 조건 확률 밀도와 클래스의 사전 확률에 따라 구한 사후 확률을 나타낸다.또한 이 모델에 따라 예시를 생성합니다.샘플에서 모델 파라미터를 구하는 것이 아닙니다.또 두 반의 사전 확률은 100배 차이가 난다.
library(mvtnorm)
frame()
set.seed(0)
par(mfrow=c(2, 2))
par(mar=c(2, 2, 1, 2))
par(mgp=c(2, 1, 0))
xrange <- c(-2, 2)
yrange <- c(-2, 2)
x1 <- seq(xrange[1], xrange[2], .1)
x2 <- seq(yrange[1], xrange[2], .1)

sigma <- matrix(c(0.5^2, 0, 0, 0.5^2), 2)
u1 <- c(-0.5, -0.5)
u2 <- c(0.5, 0.5)
N1 <- 100
N2 <- 10000
precision <- solve(sigma)
w <- precision %*% (u1 - u2)
w0 <- as.numeric((t(u1) %*% precision %*% u1 + t(u2) %*% precision %*% u2) / 2 + log(N1 / N2))
print(w)
print(w0)
base <- function(x1, x2) {
        (cbind(x1, x2))
}
logistic <- function(x) {
        1 / (1 + exp(-x))
}
estimate <- function(x1, x2){
        logistic(t(w) %*% t(base(x1, x2)) + w0)
}

p1 <- function(x1, x2) {
        dmvnorm(cbind(x1, x2), u1, sigma)
}
persp(x1, x2, outer(x1, x2, p1), xlim=xrange, ylim=yrange, border=1, theta=50, ticktype="detailed", main="p(x|C1)")

p2 <- function(x1, x2) {
        dmvnorm(cbind(x1, x2), u2, sigma)
}
persp(x1, x2, outer(x1, x2, p2), xlim=xrange, ylim=yrange, border=2, theta=50, ticktype="detailed", main="p(x|C2)")

y <- outer(x1, x2, estimate)
persp(x1, x2, y, xlim=xrange, ylim=yrange, border=3, theta=50, ticktype="detailed", main="p(C1|x)")

x <- rmvnorm(N1, u1, sigma)
d <- as.data.frame(cbind(x, 1))
x <- rmvnorm(N2, u2, sigma)
d <- rbind(d, as.data.frame(cbind(x, 2)))
names(d) <- c("x1", "x2", "class")
plot(d$x1, d$x2, col=d$class, xlim=xrange, ylim=yrange)
contour(x1, x2, y, xlim=xrange, ylim=yrange, col=3, add=T)
title(main="p(C1|x) and samples")

좋은 웹페이지 즐겨찾기