본문 바로가기
R

[R] set.seed()란?

by Henry Cho 2023. 7. 3.
728x90

set.seed()란?

포스트 난이도: HOO_Middle


# set.seed function

 

R 코드에서 set.seed() 함수를 통해서 무작위로 바뀌는 랜덤 값을 고정적으로 산출할 수 있다. 이 말을 이해하기 위해서는 우선 컴퓨터는 기본적으로 무작위의 숫자를 산출할 수가 없다. 인공지능이면 몰라도 사실상 컴퓨터는 사람처럼 생각하는 프로세스가 없기 때문에 무작위의 랜덤 숫자를 산출해내지 않는다. 마치 랜덤한 숫자처럼 보이는 것들은 주어진 조건 내에서 숫자가 랜덤하게 나올 수 있도록 코딩이 되어 있을 뿐이다. 마치 우리가 보기에 랜덤할 뿐 실제로는 컴퓨터는 주어진 조건 속에서 랜덤하게 보이게끔 숫자를 산출한다는 것이다. 그렇기에 랜덤하게 나오는 숫자지만 해당 숫자들을 고정할 수도 있다는 것이다.

두 번째로 알아야 하는 것이 바로 시드 (seed)이다. 우리가 흔히 시드값이라고 부르는 것은 랜덤한 숫자, 즉 난수를 산출하는 과정에서 동일한 시드값을 사용한다면 같은 난수가 산출되는 것을 의미한다. 시드에 대해서 조금 더 쉽게 이해를 하려면 씨앗을 생각하면 된다. 같은 종류의 식물이라고 할지라도 씨앗마다 식물이 자라나는 특징이 각기 다르다. 하지만 만약에 똑같은 씨앗을 복제해 낼 수 있다면 아무리 랜덤한 경우가 존재하더라도 동일한 랜덤한 결과로 식물이 자라날 것이다. 따라서 시드값은 특정한 랜덤한 값을 고정적으로 산출하게끔 만들어주는 역할을 수행한다.

난수 또는 랜덤 값과 시드값에 대해서 이해했다면 R 코드에서 사용하는 set.seed()를 보다 쉽게 이해할 수 있다. Time series 데이터 분석 과정에서 시드 설정을 해야하는 경우가 상당히 많은데 이때 사용하는 대표적인 함수 중에 하나가 바로 set.seed()이다. set.seed()을 통해서 특정 시드값을 괄호 또는 파라미터 안에 넣어주게 된다면 고정된 랜덤값이 산출된다.


# set.seed() 예제

 

본론으로 돌아와서 바로 예제를 살펴보면 보다 쉽게 set.seed()에 대해서 이해할 수 있다.

rpois(5,3)
> rpois(5,3)
[1] 6 3 4 3 1

rpois() 함수를 사용해서 랜덤 값을 산출하면 위와 같이 랜덤 값이 나온다. 이때 다시 한번 rpois()를 실행시키면 또 다른 값이 산출되는 걸 알 수 있다.

> rpois(5,3)
[1] 6 3 4 3 1
> rpois(5,3)
[1] 5 2 0 2 6

이처럼 랜덤 값을 산출하라는 조건에서 컴퓨터는 랜덤한 숫자를 바꿔가면서 산출되는 것이다. 하지만 set.seed()를 사용하면 랜덤 값 또한 고정되는 걸 알 수 있다.

> set.seed(123)
> rpois(5,3)
[1] 2 4 2 5 6
> set.seed(123)
> rpois(5,3)
[1] 2 4 2 5 6
> set.seed(123)
> rpois(5,3)
[1] 2 4 2 5 6

위와 같이 set.seed를 통해서 123이라는 시드값 안에 랜덤 값이 고정적으로 설정되어 있는 것을 확인할 수 있다. 여러 개의 랜덤값을 돌려도 마찬가지 결과가 산출된다.

> set.seed(123)
> rpois(5,3)
[1] 2 4 2 5 6
> rpois(5,3)
[1] 0 3 5 3 3
> set.seed(123)
> rpois(5,3)
[1] 2 4 2 5 6
> rpois(5,3)
[1] 0 3 5 3 3

이처럼 무작위의 값에 해당하지만 막상 set.seed를 사용하면 특정한 무작위 값이 산출되는 걸 볼 수 있다.

실제로 set.seed()를 사용한 글쓴이의 코드 일부를 가져와봤다.

> set.seed(123)
> group1 <- matrix(rnorm(50*20, mean=0, sd=1), ncol=50)
> group2 <- matrix(rnorm(50*20, mean=1, sd=1), ncol=50)
> group3 <- matrix(rnorm(50*20, mean=2, sd=1), ncol=50)
> data <- rbind(group1, group2, group3)
> pca <- prcomp(data, scale.=TRUE)
> plot(pca$x[,1], pca$x[,2], col=c(rep("red",20), rep("green",20), rep("blue",20)), pch=19)


 

728x90

'R' 카테고리의 다른 글

[R] R 언어 설치(다운로드): R 4.2.2  (0) 2023.01.22
[R] R 프로젝트와 R 스크립트  (0) 2022.08.11
[R] RStudio 설치 및 다운로드  (0) 2022.08.09

댓글