Sampling

[Sampling] 라틴 하이퍼큐브 샘플링(Latin Hypercube Sampling: LHS)

삐롱K 2023. 2. 13. 11:10
728x90
반응형

1. Latin Hypercube Sampling

  • 정의
    - stratified Monte Carlo(MC)의 한 종류로 기본 아이디어는 샘플링 포인트의 분포를 확률 밀도 함수(probability density function: pdf)에 가깝게 만드는 것
    - 샘플링 영역은 x의 각 구성 요소의 범위를 나누어 특정 방식으로 분할된다. x의 요소가 독립이거나, 독립을 기반으로 변형가능할 경우에만 고려한다.

  • 특징
    - 분포를 동일한 확률구간으로 분할한다.
    - 주로 long-running model에 사용하도록 의도됨(효율적인 계층화 특성 때문에)

2. Process

  • process
    1) x 변수로부터 샘플 크기 N을 생성한다. x1, x2, ..., xn
        각 변수의 범위는 동일한 확률 크기(1/N)를 기준으로 N개의 겹치지 않는 간격으로 분할된다.
        각 구간으로부터 하나의 값은 구간 내의 확률 밀도에 대해 무작위로 선택된다.
    2) x1, x2, ..., xn는 임의의 방식으로 쌍을 이룬다. Nn-tuples는 라틴 하이퍼큐브 샘플이다.
        따라서, 주어진 값 N과 n은 LHS에 대해 (N!)^(n-1)의 가능한 간격 조합(interval combinations)을 가진다.

  • 1차원 라틴 하이퍼큐브 샘플링
    • CDF(cumulative distribution function)를 N개 영역으로 균등하게 분할
    • 각 영역에서 하나의 샘플링 포인트를 랜덤하게 선택

 

  • 2차원 라틴 하이퍼큐브 샘플링
    • x1과 x2는 독립
    • x1에 대한 1차원 LHS 샘플 생성
    • x2에 대한 1차원 LHS 샘플 생성
    • LHS 샘플을 2차원 쌍에 랜덤하게 결합합니다

3. vs. Random sampling

  • x ~ N(0,1) 때

 

4. python 코드

from pyDOE import *

lhs(n, [samples, criterion, iterations])
  • n : 요인 수
  • samples : 각 요인에서 생성하고자 하는 샘플 개수(default : n)
  • criterion : 샘플 방법 정의
    • center, c : 샘플링 간격 내에서 점의 중심
    • maximin, m : 점 사이의 최소 거리를 최대화. 하지만, 간격 내에서 임의의 위치에 점 배치
    • centermaximin, cm : maximin과 공일하지만 간격 내에서 중심에 배치
    • correlation, corr : 최대 상관계수를 최소화

 

다른 방법으로, 원하는 분포를 설정할 수 있다.

from scipy.stats.distributions import norm
lhd = lhs(2, sample = 5)
lhd = norm(loc=0, scale=1).ppf(lhd)

평균 = 0, 표준편차 = 1인 정규 분포를 따르는 샘플을 추출.

아래 그래프에서, 파란색 샘플링 포인트에서 정규분포를 따르는 녹색 샘플링 된 점

요인 별로 원하는 분포 설정 가능

design = lhs(4, samples=10)
from scipy.stats.distributions import norm
means = [1, 2, 3, 4]
stdvs = [0.1, 0.5, 1, 0.25]
for i in xrange(4):
	design[:, i] = norm(loc=means[i], scale=stdvs[i]).ppf(design[:, i])

 

참고 자료

1. Latin Hypercube - an overview | ScienceDirect Topics
2. PowerPoint Presentation (cmu.edu)
3. [Python] LHS(Latin HyperCube Sampling)란? (tistory.com)
4. Randomized Designs — pyDOE 0.3.6 documentation (pythonhosted.org) - python 코드

 

 

 

728x90
반응형

'Sampling' 카테고리의 다른 글

[Sampling] Reservoir Sampling  (0) 2023.02.13
[Sampling] 중요도 샘플링 (Importance Sampling: IS)  (0) 2023.02.13