정규분포와 누적분포 비교 그래프

통계는 머신러닝에 필수라고 생각하지 않고 싶지만, 하다 보면 필수인 것 같은 느낌을 지울 수가 없다.
용어에 대한 이해가 선행되면 훨씬 쉽게 머신러닝을 할 수 있을텐데..
코딩을 직업으로 삼아서인지
모든 개념을 코드로 구현해야 명확해지는 병을 얻게 되었다.

"밑바닥부터 시작하는 데이터 과학"에서 발췌했고,
정규분포와 누적분포를 그래프를 사용해서 시각적으로 표시하는 코드이다.


import math
import matplotlib.pyplot as plt

# 정규분포의 밀도 함수
def normal_pdf(x, mu=0, sigma=1):
return math.exp(((x-mu) ** 2) / (2 * sigma ** 2)) / (math.sqrt(2 * math.pi) * sigma)

# 정규분포의 누적분포 함수
# erf : 오차 함수(error function)는 확률론, 통계학, 편미분 방정식등에서 사용하는 비초등 함수이다. 가우스 오차 함수라고도 한다.
# 오차함수는 정규 분포의 누적분포함수와 본질적으로 동일하다.
def normal_cdf(x, mu=0, sigma=1):
# erf 공식에서는 mu와 sigma는 빠져있다. 여기서는 평행 이동 및 밀도를 보여주기 때문에 추가되었다.
return (1 + math.erf((x-mu)/math.sqrt(2) / sigma)) / 2


xs = [x/10 for x in range(-50, 50)]

plt.subplot(211)
plt.plot(xs, [normal_pdf(x, sigma=1) for x in xs], '-', label='mu=0, sigma=1')
plt.plot(xs, [normal_pdf(x, sigma=2) for x in xs], '--', label='mu=0, sigma=2')
plt.plot(xs, [normal_pdf(x, sigma=0.5) for x in xs], ':', label='mu=0, sigma=0.5')
plt.plot(xs, [normal_pdf(x, mu=-1) for x in xs], '-', label='mu=-1, sigma=1')
plt.legend()

plt.subplot(212)
plt.plot(xs, [normal_cdf(x, sigma=1) for x in xs], '-', label='mu=0, sigma=1')
plt.plot(xs, [normal_cdf(x, sigma=2) for x in xs], '--', label='mu=0, sigma=2')
plt.plot(xs, [normal_cdf(x, sigma=0.5) for x in xs], ':', label='mu=0, sigma=0.5')
plt.plot(xs, [normal_cdf(x, mu=-1) for x in xs], '-', label='mu=-1, sigma=1')
plt.legend(loc=4)

plt.show()

'파이썬' 카테고리의 다른 글

enum 클래스  (0) 2017.04.09
구조체로 사용할 수 있는 collections.namedtuple  (0) 2017.04.09
defaultdict 사용법  (0) 2017.04.06
defaultdict와 딕셔너리 응용 코드  (0) 2017.04.06
matplotlib colormap  (0) 2017.04.05