[Python]Python으로 정규분포 구현하기
카테고리: py
Python으로 정규 분포 만들기
1. 정규 분포란?
- Normal Distribution
- Gaussian Distribution이라고도 함.
- 정규 분포의 모양은 두 개의 변수에 의해 결정됨.
- 평균 \(\mu\), 표준편차 \(\sigma\) 에 의해 결정
- \(N(\mu, \sigma^2)\)
- 확률 변수 x는 기댓값, 중앙값, 최빈값이 모두 \(\mu\)이며, 분산은 \(\sigma^2\)이다.
- 정규 분포 \(N(\mu, \sigma^2)\)를 따르는 확률 변수 x에 대한 확률 밀도 함수(Probability Density Function, PDF)은 다음과 같다.
- 또한 정규 분포 \(N(\mu, \sigma^2)\)의 확률 밀도 함수에 대한 누적 분포 함수(Culmulative Distribution Function, CDF)는 다음과 같다.
2. PDF, CDF 그리기
import numpy as np
import matplotlib.pyplot as plt
from scipy.special import erf
np.random.seed(0)
mu = 0.0
sigma = 1.0
x = np.linspace(-8, 8, 1000)
y = (1 / np.sqrt(2 * np.pi * sigma**2)) * np.exp(-(x-mu)**2 / (2 * sigma**2))
y_cum = 0.5 * (1 + erf((x - mu)/(np.sqrt(2 * sigma**2))))
plt.plot(x, y, alpha=0.7, label='PDF of N(0, 1)')
plt.plot(x, y_cum, alpha=0.7, label='CDF of N(0, 1)')
plt.xlabel('x')
plt.ylabel('f(x)')
plt.legend(loc='upper left')
plt.show()
3. 평균과 분산을 바꿔가며 그리
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(0)
mu1, sigma1 = 0.0, 1.0
mu2, sigma2 = 1.5, 1.5
mu3, sigma3 = 3.0, 2.0
x = np.linspace(-8, 8, 1000)
y1 = (1 / np.sqrt(2 * np.pi * sigma1**2)) * np.exp(-(x-mu1)**2 / (2 * sigma1**2))
y2 = (1 / np.sqrt(2 * np.pi * sigma2**2)) * np.exp(-(x-mu2)**2 / (2 * sigma2**2))
y3 = (1 / np.sqrt(2 * np.pi * sigma3**2)) * np.exp(-(x-mu3)**2 / (2 * sigma3**2))
plt.plot(x, y1, alpha=0.7, label=r'PDF of N(0, $1^2$)')
plt.plot(x, y2, alpha=0.7, label=r'PDF of N(1.5, $1.5^2$)')
plt.plot(x, y3, alpha=0.7, label=r'PDF of N(3.0, $2.0^2$)')
plt.xlabel('x')
plt.ylabel('f(x)')
plt.legend(bbox_to_anchor=(1.0, -0.2))
plt.show()
댓글 남기기