머신러닝/Numpy

[Numpy] #3 무작위, 랜덤, 표본추출 (normal, random) 기초문법 공부하기 3

doyou1 2021. 9. 28. 15:17
반응형

numpy 기본 문법들을 정리하면서 사실 빼먹은 부분이 있다.

바로, np.random 모듈이다. 데이터 샘플을 추출해 간편하게 테스트를 진행하는데 도움이 되는 클래스다.

하지만, np.random.normal()을 정리하던 중, 정규분포 등에 대한 이해가 부족한 것 같아 이론도 함께 포스팅해보는 것이 좋을 것 같다고 판단했다.

 

먼저 간단하게 np.random에 대해 알아보고, 이후 정규분포 등 이론과 함께 실제 어떠한 방식으로 구현하고, 그려지는지 알아보도록 하겠다.

 

  • random.rand()

- numpy.random 모듈은 기본적으로 난수 배열을 생성한다.

import numpy as np

a = np.random.rand(10)
print(a)	# [0.96336144 0.22551758 0.21048369 0.03835416 0.62371339 0.04156472        
 		# 0.21176683 0.73632178 0.33026067 0.84630173]

a = np.random.rand(2, 3)
print(a)	# [[0.93643476 0.4857223  0.70940281]  
		# [0.66230255 0.16112626 0.81223394]]

- 위의 코드를 보면

np.random.rand(arg1)는 0~1 사이의 값을 arg1개 생성

np.random.rand(arg1, arg2)는 0~1 사이의 값을 arg1 * arg2개, (arg1, arg2) 모양의 배열 생성

  • random.randint()

- random.randint()는 임의의 정수를 생성한다.

 

a = np.random.randint(5)
print(a)	# 2

a = np.random.randint(2, size=5)
print(a)	# [1 1 0 0 0]

a = np.random.randint(3, 7, size=6)
print(a)	# [6 3 4 4 3 3]

a = np.random.randint(1, 10, size=(3, 3))
print(a)	# [[4 5 1]
		# [4 6 9]
		# [1 5 9]]

위의 코드를 보면

- random.randint(arg)

- random.randint(arg, size=n)

- random.randint(arg1, arg2, size=n)

- random.randint(arg1, arg2, size=(n, m))

이 정도의 종류가 있겠다.

 

- random.randint(5)는 0<=x<5 사이의 임의의 값을 size(default=1)는 1이므로, 스칼라 1개의 정수 생성

- random.randint(2, size=5)는 0<=x<2 사이의 임의의 값을 원소로 갖고, size=5이므로, 5개짜리 1차원 배열(벡터) 생성 

- random.randint(3, 7, size=6)는 3<=x<7 사이의 임의의 값을 원소로 갖고, size=6이므로, 6개짜리 1차원 배열(벡터) 생성

- random.randint(1, 10, size=(3, 3))는 1<=x<10 사이의 임의의 값을 원소로 갖고, size=(3,3)이므로, (3,3) 짜리 2차원 배열(매트릭스) 생성

 

  • random.normal()

- 정규분포와 관련된 메소드 차례이다.

a = np.random.normal(0, 1, 2)
print(a)    # [0.50468547 0.66731928]

a = np.random.normal(1.2, 1.2, 6)
print(a)    # [1.10510272 2.77021298 0.12799903 2.27507856 3.17976773 1.38630216] 

a = np.random.normal(3.0, 1.5, 5)
print(a)    # [2.61482105 3.40154984 5.44644282 1.49042464 5.25175945]

a = np.random.normal(1.5, 3.0, 5)
print(a)    # [5.41829082 2.88277261 3.81058746 5.95167941 0.85576692]

a = np.random.normal(1.5, 3.0, (2, 3))
print(a)    # [[4.08615198 2.32661683 5.89625745]
            # [0.32099564 0.67021435 2.65726942]]

 

random.normal() 관련 문서를 찾아보며, 위 코드를 해석해 보자면

- np.random.normal(0, 1, 2)

정규분포 $ N(0, 1) $ 에서 얻은 임의의 숫자 2개 생성


- np.random.normal(1.2, 1.2, 6) 

정규분포 $ N(1.2, 1.2^{2}) $ 에서 얻은 임의의 숫자 2개 생성

 

- np.random.normal(3.0, 1.5, 5)

정규분포 $ N(3.0, 1.5^{2}) $ 에서 얻은 임의의 숫자 5개 생성


- np.random.normal(1.5, 3.0, 5)

정규분포 $ N(1.5, 3.0^{2}) $ 에서 얻은 임의의 숫자 5개 생성


- np.random.normal(1.5, 3.0, (2, 3))

정규분포 $ N(1.5, 3.0^{2}) $ 에서 얻은 임의의 숫자 2 * 3개, (2, 3) 모양의 배열(매트릭스) 생성

 

여기서 정규분포 $ N(X, Y^{2}) $ 는 무슨 뜻일까? 이에 대해 알아보자. 관련 포스팅을 작성했다

 

- 정규분포란?

https://doyou-study.tistory.com/41

 

[수학] 정규분포란

Numpy.random.normal를 공부하다 메소드 구현은 가능하나, 관련한 설명을 이해못하겠어서 직접 공부해보려한다. 정규분포를 검색해보면 이런 그림이 등장한다. 어디서 본적은 있는거같은데 정확하게

doyou-study.tistory.com

 

관련 포스팅 내용으로 보자면

np.random.normal(arg1, arg2, (m, n))은

- arg1 = 평균

- arg2 = 표준편차

- (m, n) = 생성된 배열의 모양

으로 해석된다.

 

* 참조

- https://codetorial.net/numpy/random.html

 

NumPy 난수 생성 (Random 모듈) - Codetorial

예제1 - 기본 사용 import numpy as np a = np.random.randn(5) print(a) b = np.random.randn(2, 3) print(b) sigma, mu = 1.5, 2.0 c = sigma * np.random.randn(5) + mu print(c) [ 0.06704336 -0.48813686 0.4275107 -0.9015714 -1.30597604] [[ 0.87354043 0.03783

codetorial.net

 

반응형