오늘의 인기 글
최근 글
최근 댓글
Today
Total
05-18 04:35
관리 메뉴

우노

[Python] LHS(Latin HyperCube Sampling)란? 본문

Language/Python

[Python] LHS(Latin HyperCube Sampling)란?

운호(Noah) 2020. 11. 2. 12:43

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

  • 표본 추출(샘플링) 방법 중 하나로, 위 그림과 같이 데이터가 고르게 분포 되는 특징이 있습니다.
  • python의 Latin Hyper Cube Sampling 라이브러리를 활용하면 고른 분포의 데이터셋을 생성해 줍니다.
  • 특징
    • 비교적 일관성 있게 샘플링 됩니다.
    • 전반적으로 고른 분포의 표본을 추출하고자 할 때 사용합니다.
    • 분포를 동일한 확률 구간으로 분할합니다.

예제 코드

  • pyDOE의 라틴 하이퍼 큐브 디자인은 다음과 같은 간단한 구문을 사용하여 만들 수 있습니다.

      lhs(n, [samples, criterion, iterations])
    • n : 요인 수
    • samples : 생성할 샘플 데이터 수
    • criterion : 샘플링하는 방법
  • 출력 범위는 사용자가 원하는대로 변환 할 수 있습니다.

  • 예를 들어, 8 개 샘플의 균일 분포를 정규 분포 (평균 = 0, 표준 편차 = 1)로 변환하려면 다음과 같이합니다.

      from pyDOE import *
      from scipy.stats.distributions import norm
    
      # 요인 2개, 샘플 5개
      lhd = lhs(2, samples=5)
    
      # 평균 0, 표준편차 1
      lhd = norm(loc=0, scale=1).ppf(lhd)
  • 요소 4개, 샘플 10개 출력

      lhs(4, samples=10, criterion='center')
  • 각 요인별로 평균 = [1, 2, 3, 4], 표준 편차 = [0.1, 0.5, 1, 0.25]로 정규 분포되도록 변환

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