Quantcast
Channel: Momentum
Viewing all articles
Browse latest Browse all 20

[R]Cross Entropy Minimisation

$
0
0

概要

  • エントロピー差が最小になるような最も近い分布を求める案件
  • 平均2.2の正規分布から平均2.3の分布を求める

Rコード

参考サイト1にMatlabコードがあるのでそれをR用に書き写した

library(pipeR)

#------------------------------------------------------------------------------
# Definitions
#------------------------------------------------------------------------------
N <- 1000
mu <- 2.2
sigma <- 0.2

mu_new <- 2.3

f <- function(lambda){
  sum(prior_pdf * exp(lambda * (x - mu_new)))
}


#------------------------------------------------------------------------------
# Cross Entropy Minimisation
#------------------------------------------------------------------------------
x <- rnorm(N, mu, sigma)
prior_pdf <- dnorm(x, mu, sigma)
prior_pdf <- prior_pdf / sum(prior_pdf)

ret <- optimize(f, c(-10, 10))

tmp <- exp(ret$minimum * x)
posterior_pdf <- (prior_pdf * tmp) / sum(prior_pdf * tmp)

weighted.mean(x, prior_pdf) %>>% print #equals to 2.2
weighted.mean(x, posterior_pdf) %>>% print #equals to 2.3

out <- cbind(x, prior_pdf, posterior_pdf)
out.sort <- out[order(out[, 1]), ]

plot(out.sort[, 1], out.sort[, 2], type = "l", ylim = c(0, range(out.sort[, 2:3])[2]),
     xlab = "x", ylab = "pdf", main = "Cross Entropy Minimisation")
lines(out.sort[, 1], out.sort[, 3], type = "l", col = 2)
legend("topleft", c(paste0("Prior, mu = ", mu), 
                     paste0("Posterior, mu = ", mu_new)), 
       lty = rep(1, 2), col = c(1, 2), bty="n")

結果

期待値2.2と2.3がそれぞれ求められているのであっているっぽい。

> weighted.mean(x, prior_pdf) %>>% print #equals to 2.2
[1] 2.196425
> weighted.mean(x, posterior_pdf) %>>% print #equals to 2.3
[1] 2.3

PDFをプロットすると以下の様な感じ。参考サイト1と同じに見えるっぽい?
150614

参考

Tutorial Demo on Cross Entropy minimization (I) [Matlab Octave]
http://www.quantcode.com/modules/mydownloads/singlefile.php?lid=478

Forecasting Using Relative Entropy
https://www.frbatlanta.org/-/media/Documents/filelegacydocs/wp0222.pdf
(元論文。あまり読んでいない。)


Viewing all articles
Browse latest Browse all 20

Trending Articles