私は機械学習に本当に慣れていないので、sklearnの例をいくつか試してみました
誰かが以下の例で本当に「ランダムな状態」が何を意味するかを私に説明できますか
import numpy as np
from sklearn.model_selection import train_test_split
X, y = np.arange(10).reshape((5, 2)), range(5)
X
list(y)
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.33, random_state=42)
X_train
y_train
X_test
y_test
なぜ42にハードコードされているのですか?
それは明白ではありませんか? 42は 生命、宇宙、およびすべての究極の質問に対する答え です。
深刻なことに、random_state
はシードをランダムジェネレーターに設定するだけなので、トレーニングテストの分割は常に確定的です。シードを設定しない場合、毎回異なります。
関連ドキュメント :
random_state
:int
、RandomState
インスタンスまたはNone
、オプション(デフォルト=None
)
_int
の場合、random_state
は乱数ジェネレーターが使用するシードです。RandomState
インスタンスの場合、random_state
は乱数ジェネレーターです。None
の場合、乱数ジェネレータはnp.random
が使用するRandomState
インスタンスです。
ランダムな状態では、生成した分割を確実に再現できます。 Scikit-learnはランダムな順列を使用して分割を生成します。指定したランダムな状態は、乱数ジェネレーターのシードとして使用されます。これにより、乱数が同じ順序で生成されます。
コードでrandom_stateを指定しない場合、コードを実行(実行)するたびに新しいランダムな値が生成され、トレーニングデータセットとテストデータセットは毎回異なる値になります。
ただし、random_state = 0または1または42またはその他の整数のように固定値が割り当てられている場合、コードを実行する回数に関係なく、結果は同じになります。つまり、トレーニングデータセットとテストデータセットの値は同じになります。
コードでRandom_stateが定義されていない場合、実行ごとにトレインデータが変化し、実行ごとに精度が変わる可能性があります。 Random_state = "constant integer"が定義されている場合、トレインデータは実行ごとに一定になるため、デバッグが容易になります。