[Math] How to make random


GAN을 학습하면서 랜덤에 관한 내용이 많이 나오므로 한번 공부하고 가겠다.

ㅇㅇㅇ

seed: 난수 생성 초기값 부여

난수 생성마다 값이 달라지는 것이 아니라 , 누가 , 언제 하든지 간에 똑같은 난수 생성을 원한다면 (즉 재현가능성) seed번호를 지정해주면 된다.

np.random.seed(seed = 100) # seed를 세팅함
np.random.normal(size = 5)
Out[5]: array([-1.74976547, 0.3426804 , 1.1530358 , -0.25243604, 0.98132079])

# exactly the same with the above random numbers

In [6]: np.random.seed(seed=100)

In [7]: np.random.normal(size=5) # 위의 결과랑 똑같음 

Out[7]: array([-1.74976547, 0.3426804 , 1.1530358 , -0.25243604, 0.98132079])

size:샘플 생성 개수 및 array shape설정

다차원의 array 형태로 무작위 샘플을 생성할 수 있다는 것도 Numpy randim 모듈의 장점이다.

np.random.normal(size =2)

Out[8]: array([ 0.51421884, 0.22117967])

In [9]: np.random.normal(size=(2, 3))

Out[9]:

array([[-1.07004333, -0.18949583, 0.25500144],

        [-0.45802699, 0.43516349, -0.58359505]])

1-1 이항분포로 부터 무작위 표본 추출

n =1 상황의 개수 p는 각 상황의 확률 size 는 반복

In [11]: np.random.binomial(n=1, p=0.5, size=20)

Out[11]: array([0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1])



In [12]: sum(np.random.binomial(n=1, p=0.5, size=100) == 1)/100

Out[12]: 0.46999999999999997

정규분포로부터 무작위 표본 추출

평균이 0 , 표준편차가 3인 정규분포로 부터 난수 100개를 생성해 보고 히스토그램을 그려서 분포를 bin 구간별 빈도(frequency)와 표준화한 비율(normalized percentage)로 삺펴본다

# (2) 연속형 확률분포 (continuous probability distribution)
# (2-1) 정규분포(normal distribution)로부터 난수 생성
# Draw random samples from a normal (Gaussian) distribution
# np.random.normal(loc=0.0, scale=1.0, size=None)
# mu : Mean (“centre”) of the distribution
# sigma : Standard deviation (spread or “width”) of the distribution
# size : Output shape

In [26]: np.random.seed(100)

In [27]: mu, sigma = 0.0, 3.0

In [28]: rand_norm = np.random.normal(mu, sigma, size=100)

In [29]: rand_norm

Out[29]:

array([-5.24929642,  1.02804121,  3.45910741, -0.75730811,  2.94396236,
        1.54265652,  0.66353901, -3.21012999, -0.56848749,  0.76500433,
       -1.37408096,  1.30549046, -1.75078515,  2.45054122,  2.01816242,
       -0.31323343, -1.59384113,  3.08919806, -1.31440687, -3.35495474,
        4.85694498,  4.62481552, -0.75563742, -2.52730721,  0.55355607,
        2.8112466 ,  2.19300103,  4.08466838, -0.97871418,  0.16702804,
        0.66719883, -4.32965099, -2.26905692,  2.44936203,  2.25133428,
       -1.36784078,  3.5688668 , -5.07185048, -4.06919715, -3.69730354,
       -1.63331749, -2.00451521,  0.02194369, -1.83881621,  3.89924422,
       -5.19928687, -2.9499303 ,  1.07252326, -4.84073551,  4.4121416 ,
       -3.56405279, -1.64923858, -2.82013848, -2.48379709,  0.3265904 ,
        1.52342877, -2.58668204,  3.74840923, -0.23883374, -2.66919444,
       -2.64539517,  0.05591685,  0.71353387,  0.04064565, -4.9065882 ,
       -3.13262963,  1.83911665,  2.20861564,  3.08076432, -4.29657183,
       -5.5235649 ,  1.09827968, -0.99533141, -2.06765393,  6.10382268,
       -1.65214324,  2.25135999, -3.92097702,  1.74172001, -3.31356928,
        2.07036441,  2.0606702 , -4.70006259,  2.71492236,  2.3364672 ,
        1.28469861,  0.32661597,  0.0848509 , -1.73647747, -3.5983536 ,
       -5.11785602,  1.10749187,  5.62972028, -1.13071005,  5.49580825,
        0.0090523 , -0.2280704 ,  0.01187278, -0.55504233, -7.46145461])

이상.