[ML] Bootstrap Sampling

2024. 6. 5. 23:48·.../Math
728x90
728x90

Bootstrap Sampling을 이해하고 활용하기

Bootstrap Sampling이란 무엇인가?

  • Bootstrap Sampling은 통계학(Statistics)과 데이터 과학(Data Science)에서 널리 사용되는 강력한 방법론(Methodology) 중 하나임.
  • 이는 기존의 데이터를 활용하여 통계적 추정치(Statistical Estimates)를 계산하고 신뢰 구간(Confidence Intervals)을 추정하는 방법임.
  • 특히, 표본의 크기(Sample Size)가 작거나 데이터의 분포(Distribution)에 대한 가정이 어려운 경우에 유용함.

Bootstrap Sampling의 기본 개념

Bootstrap Sampling의 핵심 아이디어는 Resampling with Replacement(복원 추출)임.

Bootstrap Sampling은

  • Resampling with Replacement를 통해 다양한 샘플을 얻고,
  • 이를 바탕으로 통계적 추정치를 계산함.

Bootstrap Sampling을 통해

  • n개의 데이터 포인트를 가지는 dataset 1개를
  • n개 (더 작게도 사용가능)의 데이터 포인트를 가지는 dataset 1000개를 얻어내는 것도 가능하다.
  • 이를 통해 population의 variance를 잘 근사할 수 있음.
더보기

population의 variance를 잘 근사하는 이유

 

복원 추출로 다양한 샘플 생성: Bootstrap Sampling은 원본 데이터를 복원 추출하여 여러 개의 샘플을 생성함. 이를 통해 모집단의 특성을 반영한 다양한 샘플 분포를 얻을 수 있음.

 

통계적 추정의 안정성: Bootstrap Sampling은 반복 추출을 통해 많은 샘플 (n개의 데이터포인트를 가지는 1000개의 샘플)을 생성하고, 각 샘플의 통계량을 계산하여 평균화함. 이는 통계적 추정의 변동성을 줄이고 안정성을 높이는 데 기여함.

 

원본 데이터의 분포 반영: Bootstrap Sampling은 원본 데이터의 분포를 그대로 반영함. 이를 통해 모집단 분산을 추정할 때, 원본 데이터의 특성을 고려한 추정을 할 수 있음.

 

큰 표본 크기의 중요성: 많은 Bootstrap Sample을 생성함으로써, 추정치의 신뢰성을 높일 수 있음. 위의 언급처럼 1000개의 Bootstrap Sample을 생성하여 population variance을 추정하므로 높은 신뢰성을 가짐.


 

참고로, 같은 수의 샘플로 Resampling with Replacement를 한다면, 확률적으로 원래 샘플 중 2/3 만이 사용되기 때문에 나머지 1/3 (out of bag이라고 불림)로 validation도 가능해진다 .

2024.06.20 - [.../Math] - [ML] Out of Bag: 유도하기.

 

[ML] Out of Bag: 유도하기.

Out of Bag (OOB)는 Bagging (Bootstrap aggregating)과 같이 Bootstraping을 이용한 Ensemble Model에 등장하는 용어. Bootstrap Sampling을 사용할 경우, 특정 predictor를 훈련시킬 때 sample point는 여러번 사용될 수 있음.이

dsaint31.tistory.com


Resampling with Replacement(복원 추출)이란,

  1. 원래 데이터에서 샘플을 추출한 후
  2. 다시 그 샘플을 원래 데이터에 포함시켜
  3. 또 다른 샘플을 추출하는 과정을 말함.

Bootstrap Sampling의 일반적인 단계

Bootstrap Sampling 과정은 다음과 같음.

  1. 데이터 준비(Data Preparation):
    • 분석하고자 하는 원본 데이터를 준비함.
  2. 목적 설정(Goal Setting):
    • Population(모집단)의 특정 통계량(Population Parameter, 예: 평균(Mean), 분산(Variance) 등)과 같이
    • 추정하고자 하는 목적을 설정함.
  3. 부트스트랩 샘플 생성(Bootstrap Sample Generation):
    • 원래 데이터에서
    • 동일한 크기(더 작게도 사용하는 경우도 있음)의 샘플을 "Resampling with Replacement"하여
    • 여러 개의 새로운 샘플을 만듦.
  4. 통계적 추정 계산(Calculation of Statistical Estimates):
    • 각 부트스트랩 샘플에서 관심 있는 통계량을 계산함.
  5. 정렬 및 신뢰 구간 계산(Sorting and Confidence Interval Calculation):
    • 여러 부트스트랩 샘플로부터 얻은 통계량을 정렬하고,
    • 신뢰 구간을 계산함.
  6. 해석(Interpretation):
    • 계산된 신뢰 구간을 해석함.

예시: 학생 성적 데이터로 부트스트랩 신뢰 구간 계산하기

아래의 예시는 구체적인 수치를 사용하여 Bootstrap Sampling을 이용해 95% 신뢰 구간을 계산하는 과정을 보여줌.

  1. 데이터 준비(Data Preparation):
    • 한 반 학생들의 성적 데이터 100개가 있다고 가정함. (n = 100)
  2. 목적 설정(Goal Setting):
    • 이 데이터로부터 모집단의 평균 성적을 추정하고,
    • 95% 신뢰 구간을 계산하고자 함. (α = 0.05)
  3. 부트스트랩 샘플 생성(Bootstrap Sample Generation):
    • 원래 데이터에서 크기 40의 샘플을 "Resampling with Replacement(복원 추출)"하여 새로운 샘플을 만듦.
    • 이 과정을 여러 번 반복하여 많은 부트스트랩 샘플을 생성함.
    • 일반적으로 1000번 정도 반복함. (R = 1000)
  4. 통계적 추정 계산(Calculation of Statistical Estimates):
    • 각 부트스트랩 샘플에서 관심 있는 통계량, 여기서는 평균 성적을 계산함.
  5. 정렬 및 신뢰 구간 계산(Sorting and Confidence Interval Calculation):
    • 1000개의 샘플 평균 값을 오름차순으로 정렬함.
    • 그 후, 하위 2.5% 백분위수와 상위 97.5% 백분위수를 확인하여 신뢰 구간을 계산함.
  6. 해석(Interpretation):
    • 이 두 값 사이의 범위가 95% 신뢰 구간이며,
    • 이 범위 안에 모집단의 실제 평균 성적이 포함될 확률이 95%임.

예시 코드: 학생 성적 데이터로 부트스트랩 신뢰 구간 계산하기

아래의 예시 코드는 Bootstrap Sampling을 이용하여 95% 신뢰 구간을 계산하는 과정을 Python 코드로 보여줌.

import numpy as np

# 원래 데이터 (예시 데이터)
original_data = np.random.randint(60, 100, size=100)

# 신뢰 수준 설정
alpha = 0.05

# Bootstrap Sampling
bootstrap_samples = np.random.choice(original_data, (1000, 40), replace=True)

# 각 샘플의 평균 계산
sample_means = np.mean(bootstrap_samples, axis=1)

# 오름차순 정렬
sorted_means = np.sort(sample_means)

# 신뢰 구간 계산
lower_bound = np.percentile(sorted_means, 2.5)
upper_bound = np.percentile(sorted_means, 97.5)

print(f"95% 신뢰 구간: ({lower_bound}, {upper_bound})")

이 예시에서

  • np.random.choice 함수는 복원 추출을 사용하여 원래 데이터에서 새로운 샘플을 생성함.
  • 각 샘플은 원래 데이터의 일부 (크기 40)로 구성되며, 데이터 포인트의 조합은 매번 달라짐.
  • 이렇게 생성된 부트스트랩 샘플을 사용하여 평균을 계산하고 신뢰 구간을 추정할 수 있음.

예시: Bootstrap Sampling 활용하여 population mean 과 variance 추정 

본 예시에서는 Bootstrap Sampling 을 활용하여 모집단 분산을 추정하는 방법을 보여주는 것임.

 

데이터:

다음 표는 온라인 쇼핑몰에서 판매되는 제품의 가격 데이터를 나타낸 것임.

이 데이터를 기반으로 모집단 mean과 variance를 추정하고자 함.

제품 번호 가격
1 52000
2 38000
3 45000
4 61000
5 49000
6 32000
7 43000
8 55000
9 47000
10 39000

1. 부트스트랩 샘플링 수행:

  • 샘플 크기 설정: 본 예시에서는 모집단 크기와 동일한 크기인 10개의 데이터 포인트로 구성된 부트스트랩 샘플을 1000번 생성함.
  • 샘플 생성: 다음 코드는 Python 라이브러리를 사용하여 부트스트랩 샘플을 생성하는 예시임.
import numpy as np

# 원본 데이터
original_data = np.array([52000, 38000, 45000, 61000, 49000, 32000, 43000, 55000, 47000, 39000])

# 부트스트랩 샘플링 수행
num_samples = 1000
sample_size = len(original_data)
bootstrap_samples = np.empty((num_samples, sample_size))

for i in range(num_samples):
    # 복원 추출로 부트스트랩 샘플 생성
    bootstrap_sample = np.random.choice(original_data, size=sample_size, replace=True)
    bootstrap_samples[i] = bootstrap_sample

2. 각 부트스트랩 샘플의 mean과 variance 계산:

각 부트스트랩 샘플에서 mean과 variance를 다음 공식을 사용하여 계산함.

$$ \text{sample_mean} = \frac{1}{n} \sum x_i $$
$$ \text{sample_variance} = \frac{1}{(n - 1)} \sum (x_i - \text{sample_mean})^2 $$

여기서,

  • $\text{sample_variance}$: 부트스트랩 샘플 분산
  • $x_i$: 부트스트랩 샘플 데이터 포인트
  • $\text{sample_mean}$: 부트스트랩 샘플 평균
  • $n$: 부트스트랩 샘플 크기

3. Population mean 과 variance 추정:

부트스트랩 샘플 variance와 mean의 평균을 모집단 variance와 mean으로 추정함.

# 각 부트스트랩 샘플의 평균 및 분산 계산
sample_means = np.mean(bootstrap_samples, axis=1)
sample_variances = np.var(bootstrap_samples, axis=1, ddof=1)

# 모집단 평균 및 분산 추정
population_mean_estimate = np.mean(sample_means)
population_variance_estimate = np.mean(sample_variances)

print(f"추정된 모집단 평균: {population_mean_estimate}")
print(f"추정된 모집단 분산: {population_variance_estimate}")

결과 해석:

본 예시에서 부트스트랩 샘플링을 통해 추정된 모집단 평균은 약 45,100원이며, 모집단 분산은 약 102,400,000원^2임.


Bootstrap Sampling의 장점

  1. 분포에 대한 가정 불필요:
    • Bootstrap Sampling은 데이터의 분포에 대한 가정을 필요로 하지 않음.
    • 이는 데이터의 분포를 사전에 알기 어려운 경우에 특히 유용함.
  2. 적용 범위의 넓음:
    • Bootstrap Sampling은 표본 크기가 작을 때나 복잡한 통계 모델에서도 사용 가능함.
    • 다양한 상황에서 유연하게 적용할 수 있음.
  3. 실용적이고 직관적:
    • 실제 데이터에 기반한 추정을 제공하여 해석이 직관적임.
    • 통계적 추정을 쉽게 이해할 수 있음.

Bootstrap Sampling의 단점

  1. 계산 비용이 높음:
    • Bootstrap Sampling은 많은 반복 추출과 계산이 필요하기 때문에 계산 비용이 높음.
    • 대규모 데이터셋이나 복잡한 모델에서는 계산 시간이 많이 소요될 수 있음.
  2. 추정의 정확성 한계:
    • 원본 데이터가 모집단을 충분히 대표하지 못하는 경우(not representative),
    • Bootstrap Sampling을 통해 얻은 추정치 역시 정확하지 않을 수 있음.
    • 이는 샘플링의 근본적인 한계임.
  3. 복잡한 의존성 문제:
    • 데이터 포인트 간의 강한 (또는 복잡한) correlation 이 있는 경우,
    • Bootstrap Sampling의 결과가 왜곡될 수 있음.
    • 독립성 가정이 위배될 때 신뢰성이 떨어질 수 있음.

결론

Bootstrap Sampling을 활용하여 더 정확한 통계적 추정치를 얻고, 데이터 분석의 신뢰성을 높일 수 있음.
그러나 단점도 고려하여 적절한 상황에서 사용하는 것이 중요함.


같이 읽어보면 좋은 자료들

https://ds31x.blogspot.com/2023/07/term-bootstrap.html

 

Term: bootstrap (부트스트랩)

원래의 부트스트랩은 Boot+strap으로, 긴 부츠의 뒷부분에 달린 고리를 뜻함. 다음의 관용어구에서 그 의미를 알 수 있음. 'pull one's own by one's bootstrap' : 불가능한 일을 해낸다는 뜻을 가짐. 그 의미

ds31x.blogspot.com

 

 

'... > Math' 카테고리의 다른 글

[CV] Intersection and Ideal Point; Homogeneous Coordinate and Cross Product  (1) 2024.06.16
[Math] Weighted Least Square  (1) 2024.06.13
[Math] Importance of Continuous and Smooth Functions in Optimization Problems  (0) 2024.06.01
[Math] Optimization Problem 의 종류  (0) 2024.06.01
[Math] Optimization 이란 (Introduction)  (0) 2024.06.01
'.../Math' 카테고리의 다른 글
  • [CV] Intersection and Ideal Point; Homogeneous Coordinate and Cross Product
  • [Math] Weighted Least Square
  • [Math] Importance of Continuous and Smooth Functions in Optimization Problems
  • [Math] Optimization Problem 의 종류
dsaint31x
dsaint31x
    반응형
    250x250
  • dsaint31x
    Dsaint31's blog
    dsaint31x
  • 전체
    오늘
    어제
    • 분류 전체보기 (748)
      • Private Life (13)
      • Programming (194)
        • DIP (112)
        • ML (26)
      • Computer (119)
        • CE (53)
        • ETC (33)
        • CUDA (3)
        • Blog, Markdown, Latex (4)
        • Linux (9)
      • ... (351)
        • Signals and Systems (103)
        • Math (172)
        • Linear Algebra (33)
        • Physics (42)
        • 인성세미나 (1)
      • 정리필요. (54)
        • 의료기기의 이해 (6)
        • PET, MRI and so on. (1)
        • PET Study 2009 (1)
        • 방사선 장해방호 (4)
        • 방사선 생물학 (3)
        • 방사선 계측 (9)
        • 기타 방사능관련 (3)
        • 고시 (9)
        • 정리 (18)
      • RI (0)
      • 원자력,방사능 관련법 (2)
  • 블로그 메뉴

    • Math
    • Programming
    • SS
    • DIP
  • 링크

    • Convex Optimization For All
  • 공지사항

    • Test
    • PET Study 2009
    • 기타 방사능관련.
  • 인기 글

  • 태그

    Probability
    SIGNAL
    Convolution
    signals_and_systems
    Optimization
    Python
    인허가제도
    function
    linear algebra
    SS
    DIP
    numpy
    math
    signal_and_system
    Term
    Vector
    opencv
    Programming
    cv2
    fourier transform
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
dsaint31x
[ML] Bootstrap Sampling
상단으로

티스토리툴바