データ分析や機械学習を行う前に、乱数シード(ランダムシード)を固定しておきましょう。
乱数シードとは
乱数シードとは、疑似乱数ジェネレーターを初期化するための数値のことです。
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
が得られました。見間違いかもしれないので、変数a
とb
を比較して確認します。
print(a == b)
# => True
乱数シードが同じだと同じ結果が得られることを確認できました。
いい結果が出るように乱数シードを変更してはいけない
「乱数の値で結果が変わることがある」と説明しましたが、これを逆手にとって乱数シードを変えることで、より良い結果が出るように調整してはいけません。
そもそもの目的・目標から外れているだけでなく、その「よい結果」というのは、「あるデータ」と「ある乱数シード」の組み合わせによってもたらされるものでしかないため、他のデータでも同じように「よい結果」になるとは限りません。