brunch

You can make anything
by writing

C.S.Lewis

by Chris송호연 Jun 12. 2019

확률 분포 튜토리얼

균일, 정규, 감마, 지수, 푸아송, 이항, 베르누이 분포

이 튜토리얼은 아래 DataCamp 튜토리얼을 번역한 글입니다.


원문:

https://www.datacamp.com/community/tutorials/probability-distributions-python

확률 분포를 plotting하는 코드는 Google Colab으로 구현하여 올려놨습니다. 실습 코드는 여기서 확인해주세요!


실습코드, Colab 노트북 링크 : 

https://colab.research.google.com/drive/1LUblYqznEchR3CGACUPVGJGx7tZ84REo



이 튜토리얼에서는 기계 학습 문헌에서 일반적으로 사용되는 확률 분포에 대해 학습합니다.


소개

확률 및 통계는 데이터 과학의 기본 축입니다. 실제로 기계 학습과 인공 지능의 근본 원리는 통계 수학과 선형 대수학뿐입니다. 종종 데이터 과학에서 특정 주제를 이해하기 위해 많은 수학을 필요로하는 연구 논문을 읽어야하는 상황에 직면하게됩니다. 따라서 데이터 과학을 더 잘 이해하려면 기본에 대한 강점을 지니는 것이 중요합니다. 수학적 이해. 이 튜토리얼은 기계 학습 문헌에 일반적으로 사용되는 확률 분포에 관한 것입니다. 초보자의 경우 시작하기에 적합한 장소입니다. 이 자습서에서는 다음을 수행합니다.


- 확률 변수, 밀도 곡선, 확률 함수 등과 같은 확률 전문 용어에 대해 배웁니다.

- 다양한 확률 분포와 그 분포 함수와 그 속성 중 일부에 대해 배웁니다.

- 이 확률 분포를 파이썬으로 작성하는 방법을 배웁니다.


시작하기 전에 다음 절에서 다루는 몇 가지 수학 용어에 대해 잘 알고 있어야합니다.


확률 변수

확률 변수는 가능한 값이 임의의 현상의 수치적 결과인 변수입니다. 무작위 변수는 이산 형과 연속 형의 두 가지 유형이 있습니다.


이산 확률 변수는 셀 수있는 고유 값을 취할 수 있으므로 수량화 할 수 있습니다. 예를 들어 무작위 변수 X를 공정한 주사위를 굴릴 때 나타나는 숫자로 정의 할 수 있습니다. X는 [1,2,3,4,5,6] 값을 취할 수 있으므로 이산 확률 변수입니다.


이산 확률 변수의 확률 분포는 가능한 각 값과 관련된 확률의 목록입니다. 확률 함수 또는 확률 질량 함수라고도합니다. 수학적으로 생각하기 위해서, 임의의 변수 X가 k 개의 다른 값을 취할 수 있고, X = xi가 P (X = xi) = pi로 정의 될 확률을 가정합니다. 그런 다음 확률 pi는 다음을 만족해야합니다.



이산 확률 분포의 몇 가지 예는 베르누이 분포, 이항 분포, 푸아송 분포 등입니다.


연속 확률 변수는 무한한 수의 가능한 값을 취하는 변수입니다. 예를 들어, 임의 변수 X를 클래스의 학생 높이로 정의 할 수 있습니다. 연속 확률 변수는 값의 간격에 대해 정의되므로 곡선 아래 영역 (또는 적분)으로 나타냅니다.


확률 분포 함수로 알려진 연속 확률 변수의 확률 분포는 연속 값을 취하는 함수입니다. 확률 변수에 의해 가정 될 수있는 값의 수가 무한하기 때문에 임의의 단일 값을 관측 할 확률은 0입니다. 예를 들어, 확률 변수 X는 실수의 간격에 걸쳐 모든 값을 취할 수 있습니다. 그러면 X가 결과 집합 A, P (A)에있을 확률은 A보다 커지고 곡선 아래의 영역으로 정의됩니다. 함수 p (x)를 나타내는 곡선은 다음을 만족해야합니다.


1 : 곡선에는 음수 값이 없습니다 (모든 x에 대해 p (x)> 0)

2 : 곡선 아래의 총 면적은 1입니다.


이러한 요구 사항을 충족시키는 곡선을 흔히 확률 밀도 곡선이라고합니다. 연속 확률 분포의 예로는 정규 분포, 지수 분포, 베타 분포 등이 있습니다.


누적 분포 함수에 대해 알아야 할 문학에서 종종 나타나는 또 다른 유형의 분포가 있습니다. 모든 확률 변수 (이산 및 연속)에는 누적 분포 함수가 있습니다. 확률 변수 X가 모든 값 x에 대해 x보다 작거나 같을 확률을 제공하는 함수입니다. 이산 확률 변수의 경우 누적 분포 함수는 확률을 합산하여 구합니다.


다음 섹션에서는 몇 가지 중요한 배포판을 살펴보고 Python으로 배포하려고하지만 그 전에 필요한 모든 라이브러리를 가져옵니다.




1. 균일 분포 Uniform distribution


아마도 가장 간단하고 유용한 분포 중 하나는 균일 분포입니다. 연속적인 균일 분포의 확률 분포 함수는 다음과 같습니다.


동일한 너비의 수의 모든 간격은 동일한 확률로 관찰되므로 분포를 설명하는 곡선은 간격을 가로 질러 일정한 높이와 다른 곳에 높이가 0 인 직사각형입니다. 곡선 아래의 영역이 1이어야하므로 간격의 길이가 곡선의 높이를 결정합니다. 다음 그림은 간격 (a, b)의 균일 한 분포를 보여줍니다. 면적은 1이어야하기 때문에주의하십시오. 높이는 1 / (b-a)로 설정됩니다.


숫자 간격 (a, b)에 따라 작동하는 난수 생성기를 사용하여 파이썬에서의 균일 한 분포를 시각화 할 수 있습니다. scipy.stats 모듈에서 유니폼 기능을 가져와야합니다.



uniform 함수는 loc 및 scale 인수를 통해 지정된 간격 사이에 균일 한 연속 변수를 생성합니다. 이 분포는 loc과 loc + scale 사이에서 일정합니다. 크기 인수는 무작위 변형 수를 나타냅니다. 재현성을 유지하려면 숫자에 할당 된 random_state 인수를 포함하십시오.



Seaborn의 distplot을 사용하여 방금 생성 한 분포의 막대 그래프를 그릴 수 있습니다. Seaborn의 distplot은 플롯을 사용자 정의하기 위해 여러 가지 인수를 취합니다. 먼저 플롯 객체 ax를 만듭니다. 여기서 히스토그램의 빈 수를 지정하고 막대 그래프의 색상을 지정하고 밀도 플롯 옵션을 kde로 지정하고 선 두께 옵션을 hist_kws와 함께 지정할 수 있습니다. xlabel 및 ylabel 인수를 사용하여 x 및 y 축의 레이블을 설정할 수도 있습니다.



2. 정규 분포 Normal Distribution


Gaussian 분포라고도 알려진 정규 분포는 데이터 과학에서 언제 어디서나 쓰입니다. 특히 통계적 추론을 주제로 여러 곳에서 만나게 될 것입니다. 많은 데이터 과학 알고리즘의 가정 중 하나입니다.


정규 분포는 평균 μ 및 표준 편차 σ로 나타낸 종 모양의 밀도 곡선을가집니다. 밀도 곡선은 그 평균을 중심으로 대칭이며, 그 표준 편차에 의해 결정되는 확산은 평균 근처의 데이터가 평균보다 멀리 떨어진 데이터보다 발생 빈도가 더 높다는 것을 보여줍니다. 주어진 점 x에서 평균 μ와 표준 편차 σ를 갖는 정규 밀도 곡선의 확률 분포 함수는 다음과 같이 주어집니다.


다음은 확률 분포가 어떻게 보이는지 설명하는 그림입니다.


거의 68 %의 데이터가 두 표준 편차 내에서 한쪽 표준 편차와 95 % 거리 사이에 있습니다. 또한 평균 0과 표준 편차 1을 갖는 분포를 표준 정규 분포라고 부르는 것이 좋습니다.


scipy.stats 모듈의 norm.rvs () 메소드를 사용하여 정상적으로 분산 된 확률 변수를 생성 할 수 있습니다. loc 인수는 분포의 평균에 해당합니다. 스케일은 표준 편차 및 크기를 무작위 수의 수에 대응합니다. 재현성을 유지하려면 숫자에 할당 된 random_state 인수를 포함하십시오.



seaborn의 distplot 함수를 사용하여 균일 분포와 마찬가지로 분포를 시각화 할 수 있습니다. 인수의 의미는 마지막 경우와 동일합니다.



3. 감마 분포 Gamma Distribution


감마 분포는 두 개의 연속적인 확률 분포 패밀리입니다. 원시 형태에서는 거의 사용되지 않지만 지수, 카이 제곱, 에를랑 분포와 같이 널리 사용되는 다른 분포는 감마 분포의 특수한 경우입니다. 감마 분포는 속도 매개 변수 라 불리는 형상 파라미터 α = k 및 역 스케일 파라미터 β = 1 / θ의 관점에서 매개 변수화 될 수있습니다. 기호 Γ (n)은 감마 함수이고 (n-1 )! :


일반적인 감마 분포는 다음과 같습니다.


shape 매개 변수 a를 인수로 취하는 scipy.stats 모듈의 gamma.rvs () 메소드를 사용하여 감마 분산 확률 변수를 생성 할 수 있습니다. a가 정수인 경우 감마는 Erlang 분포로 감소하고 a = 1 일 때 지수 분포로 감소합니다. 분산을 사용하기 위해 loc 인수를 사용하여 scale scale use 인수에, size는 분포에서 임의 변량의 수를 결정합니다. 재현성을 유지하려면 숫자에 할당 된 random_state 인수를 포함하십시오.


seaborn의 distplot 함수를 사용하여 균일 분포와 마찬가지로 분포를 시각화 할 수 있습니다. 인수의 의미는 일정한 배포 섹션에서 설명한 것과 동일합니다.




4. 지수 분포 Exponential Distribution


지수 분포는 푸 아송 포인트 프로세스에서의 이벤트 간의 시간, 즉 일정한 평균 속도로 이벤트가 연속적이고 독립적으로 발생하는 프로세스를 설명한다. 여기에는 rate 매개 변수라는 매개 변수 λ가 있으며 그 방정식은 다음과 같이 설명됩니다.


감소하는 지수 분포는 다음과 같습니다.


scipy.stats 모듈의 expon.rvs () 메소드를 사용하여 기하 급수적으로 분산 된 무작위 변수를 생성 할 수 있습니다.이 메소드는 형상 매개 변수 스케일을 인자로 취합니다.이 인자는 방정식에서 1 / λ 이외의 것입니다. 분포를 이동하려면 loc 인수를 사용하고, size는 분포에서 임의의 변량의 수를 결정합니다. 재현성을 유지하려면 숫자에 할당 된 random_state 인수를 포함하십시오.

다시 seaborn으로 아래와 같이 확률 분포와 곡선을 시각화할 수 있습니다.


5. 푸아송 분포


푸아송 확률 변수는 일반적으로 시간 간격에서 이벤트가 발생한 횟수를 모델링하는 데 사용됩니다. 예를 들어, 일정 기간 동안 웹 사이트에서 방문한 사용자의 수는 푸아송 프로세스로 생각할 수 있습니다. 푸아송 분포는 이벤트가 발생하는 비율 (μ)로 설명됩니다. 이벤트는 일정한 간격으로 0, 1, 2, ... 번 발생할 수 있습니다. 일정 간격의 평균 이벤트 수는 λ (람다)로 지정됩니다. 람다는 rate 매개 변수라고도하는 이벤트 속도입니다. 일정 기간 동안 k 개의 이벤트를 관측 할 확률은 다음 방정식에 의해 주어집니다.


정규 분포는 λ → ∞의 매개 변수를 갖는 푸아송 분포의 제한적인 경우입니다. 또한, 임의의 사건들 사이의 시간이 비율 λ의 지수 분포를 따른다면, 길이 t의 시간주기에서의 총 사건 수는 파라미터 λt를 가진 포아송 분포를 따릅니다.


다음 그림은 일반적인 포아송 분포를 보여줍니다.


scipy.stats 모듈의 poisson.rvs () 메서드를 사용하여 포아송 분산 이산 무작위 변수를 생성 할 수 있습니다.이 메서드는 μ를 모양 매개 변수로 사용하며 방정식의 λ에 불과합니다. 분포를 이동하려면 loc 매개 변수를 사용하십시오. 크기는 분포에서 임의의 변량의 수를 결정합니다. 재현성을 유지하려면 숫자에 할당 된 random_state 인수를 포함하십시오.


seaborn의 distplot 함수를 사용하여 균일 분포와 마찬가지로 분포를 시각화 할 수 있습니다. 파라미터의 의미는 동일합니다.


6. 이항 분포


성공 또는 실패, 이익 또는 손실, 성공 또는 실패 확률, 모든 시도에 대해 동일한 확률이 같은 두 가지 결과 만이 가능한 배포를 이항 분포라고합니다. 그러나 결과가 똑같이 나타날 필요는 없으며 각 시험은 서로 독립적입니다. 이항 분포의 매개 변수는 n과 p이며, 여기서 n은 총 시행 횟수이고, p는 각 시행의 성공 확률입니다. 확률 분포 함수는 다음과 같이 주어집니다.


여기서 :


셰이프 매개 변수로 n (시도 횟수) 및 p (성공 확률)을 사용하는 scipy.stats 모듈의 binom.rvs () 메서드를 사용하여 이항 분산 이산 무작위 변수를 생성 할 수 있습니다. 분포를 이동하려면 loc 매개 변수를 사용하십시오. 크기는 재판을 반복 할 횟수를 결정합니다. 재현성을 유지하려면 숫자에 할당 된 random_state 인수를 포함하십시오.

seaborn의 distplot을 사용하여 방금 만든 분포를 시각화하면 다음 막대 그래프가 렌더링됩니다.


성공 확률이 0.5 이상이므로 분포가 오른쪽으로 기울어 져 있음에 유의하십시오. 또한 포아송 분포는 다음 조건에서 이항 분포의 제한적인 경우입니다.


1. 시도 횟수는 무한대이거나 n → ∞입니다.

2. 각 시도에 대한 성공 확률은 동일하고 무한히 작거나 p → 0입니다.

3. np = λ는 유한이다.


정규 분포는 다음 조건에서 이항 분포의 다른 제한적 형태입니다.


1. 시행의 횟수는 무한대로 n → ∞이다.

2. p와 q 둘 다 무한히 작지 않습니다.


7. 베르누이 분포


Bernoulli 분포는 1 (성공)과 0 (실패)의 두 가지 가능한 결과와 단일 시행 (예 : 동전 던지기) 만 있습니다. 따라서 Bernoulli 분포를 갖는 무작위 변수 X는 성공 확률 p와 실패 확률 q 또는 1-p로 값 0을 취할 수 있습니다. 성공과 실패의 확률은 똑같이 높을 필요는 없습니다. Bernoulli 분포는 단일 시험이 수행되는 이항 분포의 특별한 경우입니다 (n = 1). 확률 질량 함수는 다음과 같이 주어집니다.


p 매개 변수 (성공 확률)를 모양 매개 변수로 사용하는 scipy.stats 모듈의 bernoulli.rvs () 메소드를 사용하여 bernoulli 분산 불연속 무작위 변수를 생성 할 수 있습니다. 분포를 이동하려면 loc 매개 변수를 사용하십시오. 크기는 재판을 반복 할 횟수를 결정합니다. 재현성을 유지하려면 숫자에 할당 된 random_state 인수를 포함하십시오.



다시 분포를 가시화하면 가능한 결과는 두 가지뿐임을 알 수 있습니다.



결론

축하합니다! 당신은이 튜토리얼의 끝까지 읽었습니다! 이 튜토리얼에서는 일반적으로 사용되는 확률 분포를 공부하고 이를 파이썬으로 작성하고 플롯하는 방법을 배웠습니다. 공부할 다른 확률 분포가 많이 있지만, 시작하기에 충분할 것입니다. 다른 멋진 통계 기능이있는 파이썬의 scipy 라이브러리를 확인하는 것을 잊지 마십시오. 앞으로도 행복한 공부가 되길 바랄게요!


Python에서 확률에 대해 더 자세히 알고 싶다면 DataCamp의 통계 시뮬레이션을 Python 과정에서 사용하십시오.


레퍼런스

http://www.stat.yale.edu/Courses/1997-98/101/ranvar.htm

http://infogalactic.com/info/Poisson_distribution

https://www.analyticsvidhya.com/blog/2017/09/6-probability-distributions-data-science/



감사합니다.

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari