[Python]Python으로 정규분포 구현하기

Date:     Updated:

카테고리:

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)은 다음과 같다.

1

  • 또한 정규 분포 \(N(\mu, \sigma^2)\)의 확률 밀도 함수에 대한 누적 분포 함수(Culmulative Distribution Function, CDF)는 다음과 같다.

1

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()

1

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()

1

py 카테고리 내 다른 글 보러가기

댓글 남기기