라오 블랙웰의 정리로 결정 함수를 개선해 본다
배경
최근에는 라오 블랙웰의 정리라는 것을 공부하고 있었습니다. 이것을 사용하면 결정 함수를 개선할 수 있다는 것 같습니다. 자면을 쫓고 있을 뿐이라고 잘 모르기 때문에, 교과서에 실려 있지 않은 예를 스스로 수치 실험해 보기로 했습니다.
라오 블랙웰의 정리란?
특정 결정 함수 $\delta(X)$가 있다고 가정합니다. 충분한 통계량 $T$를 생각해, 그 조건부 기대치에 의해 계산되는 $\delta^*(T)=E[\delta(X)|T]$를 생각합니다. $T$에 의존하기 때문에 이것도 통계량입니다. 이에 대해
$$
E[(\delta^*(T)-\theta)^2]\leq E[(\delta(T)-\theta)^2]
$$
가 성립합니다. 이것을 라오 블랙웰의 정리라고합니다. 이것을 사용하여 결정 함수를 개선하려면
특정 결정 함수 $\delta(X)$가 있다고 가정합니다. 충분한 통계량 $T$를 생각해, 그 조건부 기대치에 의해 계산되는 $\delta^*(T)=E[\delta(X)|T]$를 생각합니다. $T$에 의존하기 때문에 이것도 통계량입니다. 이에 대해
$$
E[(\delta^*(T)-\theta)^2]\leq E[(\delta(T)-\theta)^2]
$$
가 성립합니다. 이것을 라오 블랙웰의 정리라고합니다. 이것을 사용하여 결정 함수를 개선하려면
라고 하는 순서를 밟으면 OK입니다.
수치 실험
조건부 기대치를 계산해야 하기 때문에 이전에 계산한 결과를 이용하기 위해 포아송 분포로부터의 샘플링을 생각합니다. 표본 크기는 $2$입니다. 개량 전의 결정 함수로서는 $\delta(X)=X_0$를 채용합니다. 조건부 기대치는
$$
\delta^*(t) =\sum_{x_0=0}^t x_0 p(x|T=t)=\sum_{x_0=0}^t p(x|t) =\sum_{x_0=0}^ t x_0\times\frac{1}{x_0!(t-x_0)!}\frac{1}{\sum_{n=0}^t\frac{1}{n!(t-n)!}}
$$
( 충분한 통계량의 값을 리샘플링하여 모 분포의 개요를 얻습니다. 의 계산 결과를 이용했습니다).
이것은 분명히 $ T $의 함수이며 통계량입니다. 개량커녕 정말로 이것으로 추정할 수 있을까, 불안해져 왔습니다・・・.
어쨌든 해보겠습니다. $\lambda=5$로 하고 그 추정을 반복합니다.
#include <iostream>
#include <random>
#include <vector>
#include <fstream>
int factorial(int k)
{
int ret = 1;
for (int i=1; i<=k; i++)
{
ret *= i;
}
return ret;
}
int main(int argc, char **argv)
{
double lambda = 5;
std::mt19937 mt(atoi(argv[1]));
int Iter = 1000;
std::poisson_distribution<> poi(lambda);
double sum = 0;//改良後
double sum2 = 0;//改良前
for(int iter=0; iter<Iter; iter++)
{
double x0 = poi(mt);
double x1 = poi(mt);
double t = (x0+x1);
double num = 0, den = 0;
for(int n=0; n<=t; n++)
{
num += (double)n/factorial(n)/factorial(t-n);
den += 1./factorial(n)/factorial(t-n);
}
sum += num/den / (double)(Iter);
sum2 += x0 / (double)Iter;
}
std::cout << sum2 << " " << sum << std::endl;
return 0;
}
보라색이 개선 전, 녹색이 개선 후입니다. 개선 후에도 $5$ 부근이 중심이 되어, 편차가 작아지고 있는 것을 확인할 수 있었습니다.
요약
라오 블랙웰의 정리에 의해 추정 방법을 개선할 수 있음을 수치적으로 확인할 수 있었습니다.
Reference
이 문제에 관하여(라오 블랙웰의 정리로 결정 함수를 개선해 본다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/jajagacchi/items/166025e57b22f4220580
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
#include <iostream>
#include <random>
#include <vector>
#include <fstream>
int factorial(int k)
{
int ret = 1;
for (int i=1; i<=k; i++)
{
ret *= i;
}
return ret;
}
int main(int argc, char **argv)
{
double lambda = 5;
std::mt19937 mt(atoi(argv[1]));
int Iter = 1000;
std::poisson_distribution<> poi(lambda);
double sum = 0;//改良後
double sum2 = 0;//改良前
for(int iter=0; iter<Iter; iter++)
{
double x0 = poi(mt);
double x1 = poi(mt);
double t = (x0+x1);
double num = 0, den = 0;
for(int n=0; n<=t; n++)
{
num += (double)n/factorial(n)/factorial(t-n);
den += 1./factorial(n)/factorial(t-n);
}
sum += num/den / (double)(Iter);
sum2 += x0 / (double)Iter;
}
std::cout << sum2 << " " << sum << std::endl;
return 0;
}
라오 블랙웰의 정리에 의해 추정 방법을 개선할 수 있음을 수치적으로 확인할 수 있었습니다.
Reference
이 문제에 관하여(라오 블랙웰의 정리로 결정 함수를 개선해 본다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/jajagacchi/items/166025e57b22f4220580텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)