train_test_split関数 random_state とは

random_state とは

train_test_split関数の引数にrandom_state=1などといったように1などの任意の値(seedや種と呼びます)を渡す事が出来ます。

random_stateは初期値にはNoneが割り当てられていますが、random_stateに任意のint型の値を指定することで(例えば1など)にする事で分割結果が固定されます。(固定することで、常に同じように分割されるようになります。

scikit-learnのtrain_test_split関数の1つのオプションであるrandom_stateですが、特に「この数値を渡す必要があるわけではなく(適正な値が決められているわけではなく)、引数に渡す数値は0でも1でも2でも自由に初期値を与える事が出来ます。

ここで補足ですが、random_stateに引数に渡すseed(種)は完全なランダムではなく、疑似的な乱数です。

重要なのが同じseed(種)からは常に同じ乱数の組み合わせが生成されます。

ですので、同じデータセットに対して、train_test_split関数のrandom_stateに例えば1を指定するとそのseed(種)での分割は同じ結果になります。例えば、Pythonのrandomモジュールのrandom()で乱数を出力する例を見てみましょう。seedを1に固定した場合以下のコードでは、どのような環境でも同じ乱数値が得られます。

import random
random.seed(1) # この1という値は適当に1と定めたため、特に意味はありません
# seedを1とした場合、どの環境でも、最初の値は必ず 0.13436424411240122が出力されます。
print(random.random()) # 0.13436424411240122
# 同様にprint(random.random())を実行したら出力される値もどの環境でも同じその値が出力されます。

実際にtrain_test_split関数にrandom_stateを1で固定した結果を確認してみましょう。

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

iris = load_iris() # アイリスの花のデータセットの読み込み
x = iris.data # 全体は150個
y = iris.target
x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=1)
print(x_train[:3])#3つの組み合わせだけ取得

上記の出力結果はどの環境でも以下の組み合わせが出力されます。

[[6.5 2.8 4.6 1.5]
 [6.7 2.5 5.8 1.8]
 [6.8 3.  5.5 2.1]]

機械学習プログラミングを効率よく学ぶには?

機械学習プログラミングを効率よく学ぶには、普段からPythonを用いて機械学習を扱っている現役のデータサイエンティストや機械学習エンジニアに質問できる環境で学ぶことです。
質問し放題かつ、体系的に学べる動画コンテンツでデータ分析技術を学びたい方は、オンラインで好きな時間に勉強できるAI Academy Bootcampがオススメです。受講料も業界最安値の35,000円(6ヶ月間質問し放題+オリジナルの動画コンテンツ、テキストコンテンツの利用可能)なので、是非ご活用ください。