다운로드
작성자: admin 작성일시: 2016-09-22 20:44:31 조회수: 3148 다운로드: 203
카테고리: Python 태그목록:

SciPy를 이용한 확률 분포 분석

SciPy는 각종 수치 해석 기능을 제공하는 파이썬 패키지다. SciPy는 여러개의 서브 패키지로 구성되어 있는데 그 중 scipy.stats 서브패키지는 여러가지 확률 분포 분석을 위한 기능을 제공한다.

확률 분포 객체

SciPy에서 확률 분포 기능을 사용하려면 우선 해당 확률 분포에 대한 확률 분포 객체라는 것을 생성한 후에 이 객체의 메서드를 호출한다.

확률 분포 객체를 생성하는 명령에는 다음과 같은 것들이 있다.

종류 이름 확률 분포
이산 bernoulli 베르누이 분포
이산 binom 이항 분포
이산 multinomial 다항 분포
연속 uniform 균일 분포
연속 norm 가우시안 정규 분포
연속 beta 베타 분포
연속 gamma 감마 분포
연속 t 스튜던트 t 분포
연속 chi2 카이 제곱 분포
연속 f F 분포
연속 dirichlet 디리클리 분포
연속 multivariate_normal 다변수 가우시안 정규 분포

이 명령들은 모두 scipy.stats 서브패키지에 포함되어 있으므로 명령 앞에 서브패키지 이름과 마침표를 붙여야 한다. 예를 들어 가우시안 정규 분포 객체는 다음과 같이 생성한다.

In:
import scipy as sp

rv = sp.stats.norm()
type(rv)
Out:
scipy.stats._distn_infrastructure.rv_frozen

모수 지정

확률 분포 객체를 생성할 때는 분포의 형상을 구체적으로 지정하는 모수(parameter)를 인수로 지정해 주어야 한다. 각 확률 분포마다 지정해 주어야 할 모수가 다르므로 자세한 설명은 문서를 참조하여야 하지만 대부분 다음과 같은 모수들을 공통적으로 가진다.

인수 의미
loc 일반적으로 분포의 기댓값
scale 일반적으로 분포의 표준편차

예를 들어 기댓값이 1이고 표준 편차가 2인 정규 분포 객체는 다음과 같이 생성한다.

In:
rv = sp.stats.norm(loc=1, scale=2)

확률 분포 메서드

확률 분포 객체가 가지는 메서드는 다음과 같다.

메서드 기능
pdf 확률 밀도 함수 (probability density function)
pmf 확률 질량 함수 (probability mass function)
cdf 누적 분포 함수 (cumulative distribution function)
rvs 랜덤 샘플 생성 (random variable sampling)

메서드 사용법은 다음과 같다.

확률 밀도 함수

In:
xx = np.linspace(-8, 8, 100)
pdf = rv.pdf(xx)
plt.plot(xx, pdf)
plt.show()

누적 분포 함수

In:
xx = np.linspace(-8, 8, 100)
cdf = rv.cdf(xx)
plt.plot(xx, cdf)
plt.show()

랜덤 샘플 생성

랜덤 샘플을 만들때는 rvs 메서드를 사용한다. 이 메서드에서 받는 인수는 다음과 같다.

인수 의미
size 샘플 생성시 생성될 샘플의 크기
random_state 샘플 생성시 사용되는 시드(seed)값
In:
rv.rvs(size=(3,5), random_state=0)
Out:
array([[ 4.52810469,  1.80031442,  2.95747597,  5.4817864 ,  4.73511598],
       [-0.95455576,  2.90017684,  0.69728558,  0.7935623 ,  1.821197  ],
       [ 1.28808714,  3.90854701,  2.52207545,  1.24335003,  1.88772647]])
In:
sns.distplot(rv.rvs(size=10000, random_state=0))
plt.xlim(-8, 8)
plt.show()

질문/덧글

아직 질문이나 덧글이 없습니다. 첫번째 글을 남겨주세요!