난수 발생
Pythom을 이용해 데이터를 무작위로 섞거나 난수를 발생시키는 방법을 정리한다.
시드 설정
컴퓨터 프로그램에서 일반적으로 말하는 난수란, 특정한 시작 숫자로부터 정해진 알고리즘에 의해 난수처럼 보이는 수열을 생성한 것이다. 이때 시작 숫자를 시드(seed)라고 한다. 시드는 보통 현재 시각 등을 이용해 자동으로 정하지만 수동으로 설정할 수도 있다.
NumPy에서 시드를 설정하는 함수는 random.seed()로, 매개변수로 0과 같거나 큰 정수를 넣는다.
np.random.seed(0)
시드를 설정한 후, random.rand 함수로 난수를 발생시킬 수 있다. 매개변수로 생성할 난수의 개수를 전달한다.
np.random.rand(10)
# 실행 결과
array([0.5488135 , 0.71518937, 0.60276338, 0.54488318, 0.4236548 ,
0.64589411, 0.43758721, 0.891773 , 0.96366276, 0.38344152])
같은 시드로 난수를 발생시키면, 몇 번을 발생시키든 항상 같은 값이 나온다.
데이터 순서 변경
데이터의 순서는 random.shuffle 함수로 바꿀 수 있다.
x = np.arange(10)
np.random.shuffle(x)
x
# 실행 결과
array([5, 2, 3, 4, 1, 0, 9, 8, 7, 6])
데이터 샘플링
이미 존재하는 데이터 집합에서 무작위로 일부를 선택하는 것을 표본선택 또는 샘플링이라고 한다. 샘플링할 때는 random.choice 함수를 사용한다.
numpy.random.choice(a, size=None, replace=True, p=None)
# a : 배열이면 전달한 데이터. 정수면 arange로 배열을 생성한다.
# size : 샘플링 수
# replace : 참이면 한 번 선택한 데이터를 다시 선택할 수 있다.
# p L 각 데이터가 선택될 확률 배열
예시 )
# shuffle 함수와 동일
np.random.choice(5, 5, replace=False)
# 3개만 선택
np.random.choice(5, 3, replace=False)
# 반복해서 10번 선택
np.random.choice(5, 10)
# 가중치를 다르게 주어서 선택
np.random.choice(5, 10, p=[0.1, 0, 0.3, 0.6, 0])
참고 문서