Rによる最適化、パラメータ推定入門


(|)R

optimize関数について


Roptimoptimize(nls使)


optimize1

optim2


1Rexampleexample(optimize)optimize
>f<- function (x,a) (x-a)^2
>      xmin <- optimize(f,c(0, 1), tol = 0.0001,a= 1/3)
>      xmin
$minimum
[1] 0.3333333

$objective
[1] 0


f(x) = (x-a)^2

a1/3


0.3333333

0















etc


R?

補足


使RR便

ベルヌーイ分布


nk?\mu\mu = k / NR

定式化(尤度関数)


\mu1 - \mux=1x=0\mu1 - \mu
\mu^x (1 - \mu)^{1-x}
x=1\mux=0(1-\mu)n*1()
(\mu^x_1 (1 - \mu)^{1-x_1}) \times (\mu^x_2 (1 - \mu)^{1-x_2}) \times \cdots \times (\mu^x_n (1 - \mu)^{1-x_n}) = \prod^n_{i=1} \mu^{x_i} (1-\mu)^{1-x_い}
\mu\mu(Maximum Likelihood Estimator)


R

使



尤度関数の実装


n\mu^x (1 - \mu)^{1-x}n
coin <-c(1, 0, 1, 1, 0)

Likelihood <- function(x){
  return(function(u){L<- 1
    for(xninx){L<-L*u^(xn) * (1 -u)^(1-xn)
    }
    return(L)
  })
}

53coin()LikelihoodLikelihoodLikelihood
> (Likelihood(coin))(0.5)
[1] 0.03125
> (Likelihood(coin))(0.1)
[1] 0.00081

0.50.1R使\mu
plot(Likelihood(coin), 0, 1, xlab="u", ylab="尤度")

f:id:syou6162:20160928144528p:plain 0.653

尤度関数の最適化(パラメータ推定)


R使optimize使optimize
> optimize(f=Likelihood(coin),c(0, 1), maximum=TRUE)
$maximum
[1] 0.6000006

$objective
[1] 0.03456




(0,1)()


()0.6000006

0.03456




調

R
LogLikelihood <- function(x){
  return(function(u){L<- 1
    for(xninx){L<-L*u^(xn) * (1 -u)^(1-xn)
    }
    return(log(L))
  })
}
plot(LogLikelihood(coin), 0, 1, xlab="u", ylab="対数尤度")

f:id:syou6162:20160928144536p:plain plot0.6optimize\mu0.6optimize
> optimize(f=LogLikelihood(coin),c(0, 1), maximum=TRUE)
$maximum
[1] 0.5999985

$objective
[1] -3.365058

0.6

正規分布におけるパラメータ推定


使


\mu
\sigma^2

()2optimize12optim使

1p(x|\mu, \sigma^2) = \frac{1}{(2 \pi \sigma^2)^{1/2}} \exp{ \{- \frac{(x - \mu)^2}{2\sigma^2} \}}nn
\prod^n_{i=1} p(x_i|\mu, \sigma^2) = \prod^n_{i=1} \frac{1}{(2 \pi \sigma^2)^{1/2}} \exp{ \{- \frac{(x_i - \mu)^2}{2\sigma^2} \}}

\begin{align} \log (\prod^n_{i=1} p(x_i|\mu, \sigma^2)) &= \log (\prod^n_{i=1} \frac{1}{(2 \pi \sigma^2)^{1/2}} \exp{ \{- \frac{(x_i - \mu)^2}{2\sigma^2} \}}) \\ &= \sum^n_{i=1} \log (\frac{1}{(2 \pi \sigma^2)^{1/2}} \exp{ \{- \frac{(x_i - \mu)^2}{2\sigma^2} \}}) \\ &= \sum^n_{i=1} \log (\frac{1}{(2 \pi \sigma^2)^{1/2}} \exp{ \{- \frac{(x_i - \mu)^2}{2\sigma^2} \}}) \\ &= \sum^n_{i=1} \log (\frac{1}{(2 \pi \sigma^2)^{1/2}}) \sum^n_{i=1} \exp{ \{- \frac{(x_i - \mu)^2}{2\sigma^2} \}} \\ &= - \frac{N}{2} \log (2 \pi) - \frac{N}{2} \log (\sigma^2) - \frac{1}{2} \sum^n_{i=1} \frac{(x_i - \mu)^2}{2\sigma^2} \end{align}
\mu\sigma^2
- \frac{N}{2} \log (2 \pi) - \frac{N}{2} \log (\sigma^2) - \frac{1}{2} \sum^n_{i=1} \frac{(x_i - \mu)^2}{2\sigma^2}
\mu\sigma^2

R
log_likelihood_for_norm <- function(x){
  return(function(par){mu<- par[1]
    sigma2 <- par[2]
    - length(x) / 2 * log(sigma2) - 1 / 2 * sum((x-mu)^2) / sigma2
  })
}

Rcarsspeed使carsspeed
> cars$speed
 [1]  4  4  7  7  8  9 10 10 10 11 11 12 12 12 12 13 13 13 13 14 14 14 14 15 15
[26] 15 16 16 17 17 17 18 18 18 18 19 19 19 20 20 20 20 20 22 23 24 24 24 24 25

cars$speed使
> optim(par =c(5, 10),fn= log_likelihood_for_norm(cars$speed), control = list(fnscale = -1))
$par
[1] 15.39812 27.40184

$value
[1] -107.7636

$counts
function gradient 
      75       NA 

$convergence
[1] 0

$message
NULL

optimizepar使fncontrol = list(fnscale = -1)optim*2

parvalueconvergence0

\mu = 1 /N \sum_{n=1}^N x_n\sigma^2 = 1 / n (x_n - \mu)^2optim\mu = 1 /N \sum_{n=1}^N x_n\sigma^2 = 1 / n (x_n - \mu)^2*3
> mean(cars$speed)
[1] 15.4
> var(cars$speed)
[1] 27.95918

optim

13plotR
www.yasuhisay.info



R



R使()


!!!

これなら分かる最適化数学―基礎原理から計算手法まで

これなら分かる最適化数学―基礎原理から計算手法まで

*1:f(x,y) = f(x)f(y)が定義ですが、まあ直感的な理解でもよいでしょう

*2:詳しくはhelpを見てください。

*3:不偏分散ではないが