반응형
✅ 정규분포 PDF 함수 구현 및 시각화 코드 (주석 포함)
import numpy as np
import matplotlib.pyplot as plt
import platform
import matplotlib.font_manager as fm
# ✅ 한글 폰트 설정
if platform.system() == 'Windows':
plt.rc('font', family='Malgun Gothic')
elif platform.system() == 'Darwin':
plt.rc('font', family='AppleGothic')
else:
plt.rc('font', family='NanumGothic')
plt.rcParams['axes.unicode_minus'] = False
# 정규분포 PDF 함수 정의
def f(x, mu, sigma):
return (1 / (sigma * np.sqrt(2 * np.pi))) * np.exp(-((x - mu)**2) / (2 * sigma**2))
# 평균과 표준편차
mu, sigma = 0, 1
# x 범위와 PDF 계산
x = np.linspace(-4, 4, 1000)
y = f(x, mu, sigma)
# 샘플 데이터 생성
samples = np.random.normal(mu, sigma, 1000)
# 그래프 그리기
plt.figure(figsize=(10, 6))
plt.plot(x, y, label="PDF (정규분포)", color='blue')
plt.hist(samples, bins=30, density=True, alpha=0.5, label="샘플 히스토그램", color='orange')
plt.title("정규분포 PDF와 샘플 데이터 비교")
plt.xlabel("x 값")
plt.ylabel("확률 밀도")
plt.legend()
plt.grid(True)
plt.tight_layout()
plt.show()
🔍 실행 결과 해석
- 파란 곡선: 직접 구현한 정규분포 PDF — 이론적인 모델
- 주황색 히스토그램: 실제 생성한 1000개의 난수 분포
- 두 그래프가 거의 일치하면, np.random.normal()이 정규분포를 잘 따르고 있다는 뜻입니다.
위 그래프는 **직접 구현한 정규분포 확률 밀도 함수(PDF)**와 np.random.normal()로 생성한 샘플 데이터의 히스토그램을 비교한 결과입니다.
📌 구성 설명:
- 파란 선 (PDF): 평균 0, 표준편차 1인 정규분포의 이론적 곡선입니다.
- 주황색 히스토그램: 1000개의 난수를 표준 정규분포에서 추출한 실제 데이터 분포입니다.
- 두 그래프는 유사한 종(bell) 모양을 나타내며, 이론적 곡선과 실제 샘플의 일치 여부를 시각적으로 검증할 수 있습니다.
💡 참고: 그래프 제목, 라벨 등에 한글이 깨진 것은 런타임 환경에서 한글 폰트(예: NanumGothic, Malgun Gothic)가 없기 때문입니다. 실제 로컬 환경에서 실행 시 plt.rc('font', family='Malgun Gothic') 같은 설정을 추가해주면 한글이 잘 표시됩니다.
✅ 왜 정규분포를 많이 사용할까?
1. 자연현상에서 정규분포가 자주 나타남
- 키, 몸무게, 시험 점수, 노이즈 등 다양한 실세계 데이터가 대부분 평균 근처에 몰리고 양 끝이 점점 줄어드는 형태를 보입니다 → 바로 정규분포입니다.
- 이는 중심극한정리(Central Limit Theorem)에 의해 설명됩니다.
- "여러 독립적인 랜덤 변수의 평균은 정규분포에 수렴한다."
✅ 지금 작성한 코드의 핵심
🔷 f(x, mu, sigma)
- 정규분포의 확률 밀도 함수(PDF) 직접 구현
- 이론적인 곡선을 그릴 수 있음 → 종모양 확인 가능
def f(x, mu, sigma):
return (1 / (sigma * np.sqrt(2 * np.pi))) * np.exp(-((x - mu)**2) / (2 * sigma**2))
🔷 samples = np.random.normal(mu, sigma, 1000)
- 정규분포에서 샘플링한 실제 데이터
- 실제 데이터가 PDF와 잘 일치하는지 히스토그램으로 시각화 가능
✅ 시각화 결과의 의미
plt.plot(x, y) # 이론적 PDF (종모양)
plt.hist(samples, density=True) # 샘플 데이터 히스토그램
- 이 두 그래프가 잘 일치하면, np.random.normal()로 생성한 데이터가 실제 정규분포를 따른다는 것을 직관적으로 확인할 수 있습니다.
✅ 정규분포는 어디에 쓰이는가?
분야 | 사용 예시 |
통계 | 평균, 표준편차 분석, 신뢰구간 계산 |
머신러닝 | 노이즈 생성, 가우시안 모델, 베이지안 추론 |
신호처리 | 측정 오차 모델링 |
금융공학 | 주가 수익률 모델링 등 |
반응형
'데이터 사이언스 코딩 > Python 프로그래밍' 카테고리의 다른 글
데이터전처리 시계열데이터 기온시각화 pandas csv defaultdict (0) | 2025.07.09 |
---|---|
이터레이터(iterator) 메모리 효율성과 속도 스트리밍 처리 대규모 데이터 다루기 (0) | 2025.07.03 |
.format() 포멧 python 파이썬 print 프린트 (0) | 2025.06.19 |
얕은복사 깊은복사 참조변수 사본전달 원본전달 shallow copy deep copy (1) | 2025.06.18 |
python 파이썬 변수 데이터 타입 확장형for문 pop remove append insert (0) | 2025.06.18 |