개념 정리/문법 정리

무작위 표본 추출, 난수 만들기(random sampling,random number generation)

히니1008 2022. 7. 3. 21:19

https://rfriend.tistory.com/284

 

[Python NumPy] 무작위 표본 추출, 난수 만들기 (random sampling, random number generation)

이번 포스팅에서는 시간과 비용 문제로 전수 조사를 못하므로 표본 조사를 해야 할 때, 기계학습 할 때 데이터셋을 훈련용/검증용/테스트용으로 샘플링 할 때, 또는 다양한 확률 분포로 부터 데

rfriend.tistory.com

 

seed: 난수 생성 초기값 부여

size:샘플 생성(추출)개수 및 array shape설정

 

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

np.random.binominal(n,p,size)

 

1-2)초기하분포에서 무작위 표본 추출 

np.random.hypergeometric(ngood,nbad,nsample,size)

 

1-3)포아송분포로부터 무작위 표본 추출

np.random.poisson(lam,size)

 

2-1)정규분포로부터 무작위 표본 추출

np.random.normal(loc,scale,size)

 

(2)연속형 확률분포(continuous probability distribution)

2-1)정규분포(normal ditribution)로부터 난수 생성

#Draw random samples from a normal (Guassian) distribution

#np.random.normal(loc=0.0, scale=1.0, size=None)

#mu: Mean("centre") of the distribution

#sigma: Standard deviation (spresd or "width") of the distribution

#size: Output shape

 

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

(여기서 평균과 표준편차의 의미?)

np.random.seed(100)

mu,sigma= 0.0, 3.0 

rand_norm = np.random.normal(mu,sigma,size=100)

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])

 

count, bins, ignored = plt.hist(rand_norm, normed=False)

 

2-2) t분포로부터 무작위 표본 추출: np.random.standard_t(df,size)

자유도가 3인 t-분포로부터 100개의 난수를 생성하고 히스토그램 그리기

# t-분포로부터 난수 생성

# Draw samples from a standard Student's distribution with df degrees of freedom

# np.random.standard_t(df,size=None)

# df: Degree of freedom

# size: Output shape

np.random.seed(100)

rand_t = np.random.standard_t(df=3, size=100)

In [35]: rand_t

Out[35]:

array([-1.70633623,  0.61010003,  0.45753218, -0.85709656, -0.42990712,
       -0.7437467 ,  0.8444005 , -0.4040428 ,  2.13905276, -0.10844638,
        0.67238716,  1.88720362, -2.57340231, -0.69724955, -3.40107659,
       -0.57745433, -0.36487447,  3.95862541,  2.34665412, -0.94310449,
        0.81852816, -0.48391289,  0.01380029, -0.43003718, -2.25784604,
       -0.18216847, -1.21433582,  0.46347964,  0.50024665, -1.1595865 ,
        0.02358778, -1.18879826, -0.38767689,  2.24289791, -2.80798472,
       -2.838893  , -0.39222432, -1.61499121, -1.78498184,  0.44618923,
       -1.5181203 ,  5.44389927,  4.17743903, -0.49617121, -0.02996529,
        0.89595015,  1.14860485, -3.16541308,  0.14279246,  0.83121743,
       -0.32403947,  0.59297222, -0.39750861,  0.57634934,  0.81587478,
       -1.29367024, -0.28580516, -0.48422765, -0.83697192,  0.50702557,
       -1.98915687,  2.92965716, -1.19522074,  0.65511251,  2.12055605,
       -0.03640814, -0.41931018,  3.31199804, -0.61725596,  0.79681204,
        1.86805014, -0.54345259,  3.11909936,  0.86410458,  2.66353682,
        0.23735454, -0.76306875,  0.24471792, -0.13515045,  0.26402784,
        4.68946895,  0.70573709, -0.17783758,  1.85205955, -0.18352788,
       -0.65713104, -0.73674278,  2.16549569,  1.22326388, -0.5112858 ,
       -1.54451989, -1.73428432,  0.46947115,  1.66594804,  0.51687137,
        1.51361314, -2.22193709,  0.89557421,  0.56222653, -0.55564416])

 

'개념 정리 > 문법 정리' 카테고리의 다른 글

객체,클래스,인스턴스의 차이  (0) 2022.07.04
ndarrya 클래스  (0) 2022.07.03
loc(다중조건)  (0) 2022.07.03
행 항목 이름 바꾸기  (0) 2022.06.22
DataFrame 대소문자 구별 잘하기  (0) 2022.06.22