Python/Python Language

Numpy(넘파이) 난수(Random)와 분포도

567Rabbit 2024. 4. 24. 18:08

from numpy import random
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

 

 

Random Numbers in NumPy (넘파이 난수)
- 무작위란 물리적으로 논리적으로 예측할 수 없는 수
- 난수를 생성하는 알고리즘
- 생성 알고리즘을 통해 생성된 난수

 

 

randint()

- 정수로 난수 생성

- 간편하게 로또번호 생성
lt = random.randint(46, size=(5))
print(lt)

 

 

rand()
무작위 플롯 생성(Random Float) 0과 1사이의 부동소수점 생성 
Float = random.rand()
print(Float)

 

 

 

 

 

Data Distribution [데이터 배포]
- 가능한 모든 값과 각 값이 발생하는 빈도의 목록
- 이러한 목록은 통계 및 데이터/과학 작업을 할 때 중요하다
- 무작위 분포는 특정 확률밀도함수. 연속적인 확률을 설명하는 함수, 배열에 있는 모든 값의 확률
- choice() 모듈의 방법을 사용하여 정의된 확률을 기반으로 난수를 생성할 수 있다
- 확률은 0과 1사이의 숫자로 설정된다 0 = 값이 결코 발생하지 않음을 의미하고 1 = 값이 항상 발생함을 의미한다

 

 

choice()
배열 매개변수의 값으로 구성된 2차원 배열을 생성
q = random.choice([3,5,7,9], p=[0.1, 0.3, 0.6, 0], size = (3,5))
print(q)

 

size??

랜덤의 확률을 조정한다
1차원 배열 3,5,7,9
값이 3이 될 확률 0.1
값이 5가 될 확률 0.3
값이 7이 될 확률 0.6
값이 9가 될 확률 0으로 설정합니다

 


normal()

- 임의 정규 분포를 생성합니다

e = random.normal(size=(2,3))
print(e)

- 2x3크기의 랜덤 정규 분포를 생성합니다

 

 

shuffle()

- 배열의 요소를 무작위로 섞는다 (원본을 수정한다)

 

 

permutation()

- 원래 배열(원본)은 재배열하지 않고 재배열된 배열을 보여준다.

 

 

 

분포도

 

 

1. 이항 분포

 

이산분포를 의미하며 동전던지기와 같은 이진 시나리오를 설명한다 (앞면 또는 뒷면)

세가지 매개변수를 가진다 n(시행횟수) p(각 시행의 발생확률) size(리턴된 배열의 모양)
정규분포와의 비교 - 정규분포는 연속적인 반면 이항은 이산적이다

 

scale ? 동전던지기에 대해 10번의 시도가 주어지면 10개의 데이터 포인트가 설정된다

q = random.binomial(n=10, p=0.5, size=10) 

 

sns.distplot(random.normal(loc=50, scale=5, size=1000), hist=False, label='normal')
sns.distplot(random.binomial(n=10, p=0.5, size=1000), hist=False, label='binomial')

 

plt.show() 

 

 

 

 

2. 포아송분포

 

특정 시간에 이벤트가 몇 번 발생할 수 있는지 추정한다
예) 하루에 밥을 두번 먹는다면 그가 밥을 세번 먹을 확률은 얼마나 되는가?
lam : 발생률 또는 알려진 발생횟수 , 위의 예시의 경우 2
size : 반환된 배열값

 

q = random.poisson(lam=2, size=10)
print(q)

#발생 2에 대해 임의의 1 x 10 분포를 생성한다


sns.distplot(random.poisson(lam=2, size =1000), kde=False)
plt.show()

 

 

 

 

          

3. 균등분포 

 

모든 사건이 발생할 가능성이 동일한 확률을 설명하는데 사용된다 uniform()
매개변수 a(하한 =>기본값은 0.0) b(상한 =>기본값은 1.0) size(리턴된 배열의 모양)

 

w = random.uniform(size=(2,3))
print(w)

sns.distplot(random.uniform(size=1000), hist=False)
plt.show()

 

 

 

 

4. 물류분포 

 

물류성장을 설명하는 데 사용한다  logistic()
로지스틱, 회귀, 신경망 등의 머신러닝에 광범위하게 사용된다
loc(정점이 어디인지를 의미함, 기본값은 0) scale(표준편차, 분포의 평탄성) size(리턴된 배열의 모양)

 

r = random.logistic(loc=1, scale=2, size =(2,3))
print(r)
# 평균이 1이고 stddev(표준편차)가 2.0인 로지스틱분포에서 2 x 3 샘플을 그린다

sns.distplot(random.logistic(size=100),hist=False)
plt.show()

 

 

 


5. 다항분포

 

이항분포를 일반화 한 것이다. 둘 중 하나인 이항시나리오와 다르게 혈액형, 주사위의 굴림 결과와 같은 다항시나리오의 결과를 설명한다.
n(가능한 결과의 수) pvals(결과확률목록) size(리턴된 배열의 모양) 

 

u = random.multinomial(n=6, pvals=[1/6, 1/6, 1/6, 1/6, 1/6, 1/6])
print(u)

sns.distplot(random.multinomial(n=6, pvals=[1/6, 1/6, 1/6, 1/6, 1/6, 1/6]),hist=False)
plt.show()

 

 

 


6. 지수분포

 

실패/성공 등 다음 이벤트까지의 시간을 설명하는 데 사용된다  exponential()
scale(비율의 역수=포아송분포의 램, 기본값은 1.0) size(리턴된 배열의 모양)  


sns.distplot(random.exponential(size=1000), hist=False)
plt.show()

 

 

 


7. 카이제곱분포

 

가설검증의 기초로 사용된다
df(자유도) size(리턴된 배열의 모양)


p = random.chisquare(df=2, size=(2,3))
print(p)

 

 

 


8. 레일리분포

 

신호처리에 사용된다
scale(비율의 역수=포아송분포의 램, 기본값은 1.0이다) size(리턴된 배열의 모양)


a = random.rayleigh(scale=2, size=(2,3))
print(a)

 

 

 


9. 파레토분포

 

파레토의 법칙을 따르는 분포 80-20분포이다

20% 요인이 80% 결과를 유발한다 한쪽으로 편중된 모양
 a(모양 매개변수) size(리턴된 배열의 모양) 


sns.distplot(random.pareto(a=2, size=1000),kde=False)
plt.show()

 

 

 

 


10.  Zipf배포

 

다섯번째로 가장 흔한 단어는 가장 일반적인 단어보다 거의 1/5배 더 자주 나타난다

모음에서 n번째 공통용어는 가장 일반적인 용어의 1/n배 영어에서 다섯번째로 흔한 단어는 가장 일반적인 단어보다 거의 1/5배 더 자주 나타난다
a(분포 매개변수) size(리턴된 배열의 모양)

 

s = random.zipf(a=2, size=1000)
sns.distplot(s[s<10], kde=False)
plt.show()