質問: Pythonで機械学習をしているのですが、sklearnのtrain_test_splitについて質問です。 パラメータに、random_stateがあるのですが、その値が1や0の場合どのような違いがあるのでしょうか? 数値を変えた場合に認識精度が上がったり、下がったりするのですが、その違いについて教えてください。 マニュアルを見たところ、seedがどうのと書いてありました。また、試しに、配列を作成し、random_stateの値を1や0だけでなく、2や111など意味不明な値に変えて処理をしてみてもうまくsplitできています。 よろしくお願いします。
回答: `sklearn`を含む通常プログラミングで利用できる乱数は、完全なランダムではなく、疑似的な乱数です。 一般的な疑似乱数は、通常、種(`random_state` = `seed`)=初期値を与えて作り出す必要があります。 また、ここが重要なのですが、**同じ種からは常に同じ乱数(の組)が出来上がります**。 例えば`random_state`に`1`を与えると、常に`1,5,2,4,...`という乱数(の組)が得られます。 また、同じように`2`を与えると常に`3,4,1,1,...`が得られます。(あくまで単純化した例です) その結果得られる乱数の質(ばらつき具合など)は、変わりませんので`random_state`にどんな値を与えても、具体的にどのデータが抽出されるかは異なりますが、ちゃんと`split`されます。 以下のコードでは、どのような環境でも同じ乱数値が得られます。 ``` import random random.seed(123) # この123という値には特に意味はない for i in range(5): print( random.random()) """ 0.052363598850944326 0.08718667752263232 0.4072417636703983 0.10770023493843905 0.9011988779516946 """ ``` 参考:Random Seed って言葉を初めて知った!