실습 · 연습문제 2개
D-최적 설계를 찾는 교환 알고리즘 d-optimal-exchange
회귀 모델 의 설계 행렬 는 실험 조건마다 한 행이다. D-최적 설계는 를 최대화하는 실험 조건 개를 고른다.
함수 d_optimal(features, cand, n, rng, sweeps)를 완성한다.
| 인자 | 뜻 |
|---|---|
features |
조건 배열 (n,)을 받아 설계 행렬 (n, p)를 돌려주는 함수 |
cand |
후보 실험 조건 (C,) |
n |
실험 수 |
rng |
np.random.Generator. 초기 설계를 rng.choice(cand, size=n)으로 뽑는다 |
sweeps |
최대 반복 횟수 |
알고리즘:
- 무작위 초기 설계에서 시작한다.
- 한 번의 sweep에서 각 위치 의 조건을 후보 전체로 바꿔 보고, 가 가장 커지는 후보가 현재보다 좋으면 바꾼다.
- 한 sweep 동안 아무것도 바뀌지 않으면 멈춘다.
- 정렬한 설계
(n,)을 반환한다.
가 특이하면 는 로 취급한다(np.linalg.slogdet의 부호가 0 이하인 경우).
테스트는 다음을 확인한다.
- 직선 모델(실험 4번)에서 양 끝 을 찾는지
- 2차 모델(실험 6번)에서 을 찾는지
- 결과의 가 같은 실험 수의 등간격 설계보다 크거나 같은지
힌트: 본문 셀 4와 같은 알고리즘이다. 특이 행렬 처리만 덧붙인다.
기대 정보 이득의 중첩 몬테카를로 추정 eig-monte-carlo
측정 모델이 , 일 때, 설계 의 기대 정보 이득을 중첩 몬테카를로로 추정한다.
함수 eig_nmc(mean_fn, theta_outer, theta_inner, sigma, rng)를 완성한다.
| 인자 | 뜻 |
|---|---|
mean_fn |
파라미터 배열 (K, p)를 받아 측정의 평균 (K, n)을 돌려주는 함수(설계 는 이미 고정되어 있다) |
theta_outer |
사전분포에서 뽑은 바깥 표본 , shape (N, p) |
theta_inner |
사전분포에서 따로 뽑은 안쪽 표본 , shape (M, p) |
sigma |
측정 잡음 표준편차 |
rng |
np.random.Generator. 가상 측정 의 잡음을 뽑는 데 쓴다 |
- 을 만든다.
rng.normal(size=...)을 한 번 호출해(N, n)잡음을 뽑는다. - 가우시안 로그우도의 상수항()은 두 항에서 같으므로 빼도 된다.
- 안쪽 평균의 로그는 수치 안정을 위해
scipy.special.logsumexp로 계산한다. - 추정값(실수 하나, 단위 nat)을 반환한다.
테스트는 선형 가우시안 모델의 해석해 와 비교하고, 측정값이 파라미터와 무관한 설계에서 EIG가 0 근처인지, 같은 측정을 반복하면 EIG가 커지는지 확인한다.
힌트: 본문 셀 3의 eig_nmc와 같은 계산이다. 안쪽 로그우도 행렬의 shape은 (N, M)이다.