[Numpy]乱数シードを固定する(random.seed)

[Numpy]乱数シードを固定する (random.seed)

データ分析や機械学習を行う前に、乱数シード(ランダムシード)を固定しておきましょう。

目次

乱数シードとは

乱数シードとは、疑似乱数ジェネレーターを初期化するための数値のことです。

Pythonでは、Pythonの環境が初めて実行されたときに設定されます。このとき設定される乱数シードは毎回異なります。

乱数シードを固定しないとどうなるか

乱数シードが異なると、得られる乱数が異なります。

そのため、乱数シードを固定していないと、実行するごとに、異なる乱数が得られる可能性があります。

NumpyやNumpyを使用しているライブラリでは処理に乱数を使用しており、得られる乱数が異なると、異なる結果が得られる可能性があります。

これは、同じデータを処理しても異なる結果が得られる「再現性の低下」に繋がり、試行錯誤を行うデータ分析や機械学習では好ましくありません。

同じ結果が再現するように乱数シードを固定しておきましょう。

乱数シードの固定方法

乱数を固定する方法は簡単です。

以下のコードを実行することで乱数を固定できます。

import random
import numpy as np

np.random.seed(1234)
random.seed(1234)

コードを書く前にこれを実行すれば、それ以降は設定した乱数シードで初期化した状態で乱数を使用できます。

コード中で使用した1234という数値に意味はありません。実行するたびに変わらない固定の数値であることが重要です。

乱数シードが同じだと同じ結果になるかを確認する

乱数シードが同じときに同じになることを実際に確認してみましょう。

import random
import numpy as np

np.random.seed(1234)
random.seed(1234)
a = np.random.rand()
# => 0.1915194503788923

乱数シード1234を設定した直後のrand関数で得られた乱数は0.1915194503788923です。

では、再度同じ乱数シードを設定します。

np.random.seed(1234)
random.seed(1234)

もう一度rand関数を使って乱数を取得してみます。

b = np.random.rand()
print(b)
# => 0.1915194503788923

同じ0.1915194503788923が得られました。見間違いかもしれないので、変数abを比較して確認します。

print(a == b)
# => True

乱数シードが同じだと同じ結果が得られることを確認できました。

いい結果が出るように乱数シードを変更してはいけない

「乱数の値で結果が変わることがある」と説明しましたが、これを逆手にとって乱数シードを変えることで、より良い結果が出るように調整してはいけません

そもそもの目的・目標から外れているだけでなく、その「よい結果」というのは、「あるデータ」と「ある乱数シード」の組み合わせによってもたらされるものでしかないため、他のデータでも同じように「よい結果」になるとは限りません。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次