【R】set.seed()関数って何なのさ?
Rによるデータサイエンスを勉強していたら、頻繁に遭遇するset.seed()。
乱数生成するのに必要な理由が分からなかったけど、やっと分かった。
set.seed()は乱数種を指定する関数で、常に同じ乱数を発生させられる。もはや乱数じゃない(笑)!
どういうことか具体的に見てみよう。
正規分布に従う乱数を発生させる関数rnormを使用して、乱数を5個発生させる。
> rnorm(5) [1] -1.1589164 0.6717548 -0.5479705 -0.3373437 0.1150608 > rnorm(5) [1] -0.7928601 0.4900138 0.2429032 0.1189651 -0.1188704 > rnorm(5) [1] 0.1798600 -0.6607594 -1.8879199 1.3459750 -1.2285467 > rnorm(5) [1] 0.4063670 -0.8721864 1.0451283 1.3502680 -0.5012976 > rnorm(5) [1] -1.9622060 1.6993498 0.5184371 -1.8604497 0.7391993
たしかに、rnormを実行するたびに乱数が生成されて、発生する乱数も異なっている。
さて、ここで、set.seed()とセットでrnormを実行してみよう。
> set.seed(1);rnorm(5) [1] -0.6264538 0.1836433 -0.8356286 1.5952808 0.3295078 > set.seed(1);rnorm(5) [1] -0.6264538 0.1836433 -0.8356286 1.5952808 0.3295078 > set.seed(1);rnorm(5) [1] -0.6264538 0.1836433 -0.8356286 1.5952808 0.3295078 > set.seed(1);rnorm(5) [1] -0.6264538 0.1836433 -0.8356286 1.5952808 0.3295078
なんと常に同じ数のセットが得られた。