AI資格ドリル
資格を選ぶ

用語比較

train_test_splitのrandom_stateを固定する場合と指定しない場合の違い(再現性)

train_test_splitのrandom_stateに整数を渡すと、何度呼び出しても同じ分割になります。指定しない(既定値のNone)と、整数を渡した場合のような再現できる出力は期待できません。

渡す整数の大きさに意味はありません。scikit-learnの公式文書は、この引数を、分割の前に行うシャッフルを制御するものと説明しています。

この記事の根拠と出典

各セクションの見出しの下に、公式資料で確認した内容か編集部の整理かをラベルで示しています。 試験日・料金・申込条件・試験方式は変わることがあるため、申込前に公式サイトで確認してください。

random_stateに整数を渡すとrandom_stateを指定しないの要点

random_stateに整数を渡す

シャッフルの結果が固定され、複数回の呼び出しで再現できる出力になる。公式の例はrandom_state=42、試験の公式例はrandom_state=0。

random_stateを指定しない

既定値はNone。再現できる出力にしたいときは整数を渡す、と公式文書が説明している。実行のたびに分割が変わりうる。

違いを表で確認

比較軸random_stateに整数を渡すrandom_stateを指定しない
引数の役割整数を渡して、分割前のシャッフルを固定する既定値のNoneのまま。整数を渡さない
何度も呼び出したとき複数回の呼び出しで、同じ出力になる再現できる出力は、整数を渡したときの説明であり、指定しないときは保証されない
学習用とテスト用の中身毎回同じ行が学習用・テスト用に入る実行のたびに、入る行が変わりうる
結果を人に渡すとき同じコードを動かせば、同じ正解率を確かめられる正解率が実行のたびにずれて、確認が難しくなる
shuffle=Falseのときシャッフルをしないので、分割は並びの順になる同じくシャッフルをしないので、分割は並びの順になる
試験で探す語random_state=0、再現性、同じ分割引数なしのtrain_test_split(X, y)、実行のたびに変わる

Python3エンジニア認定データ分析試験の学習に使う書籍(Amazon)

PR

ほかの資格を含む参考書・問題集の一覧を見る

どこで迷っているかを切り分ける

01

試験の公式例にrandom_state=0があって、意味が分からない人

公式例は、train_test_split(X, y, random_state=0)で学習用とテスト用に分けています。0という数に意味はなく、分割の乱数を固定して、同じ結果を再現するための指定です。

02

実行するたびに正解率が変わって、困っている人

random_stateを指定しないと、分割が実行のたびに変わりうるので、正解率もずれます。整数を渡して分割を固定すれば、モデルを変えた効果と分割の偶然を切り分けやすくなります。

03

shuffle=Falseとrandom_stateの関係が混ざる人

random_stateが制御するのは、分割の前に行うシャッフルです。shuffle=Falseでシャッフルをしないなら、分割は並びの順になります。

具体例で使い分ける

例 1

公式の例で、random_state=42のときの分割を見る場合

公式文書の例は、X=[[0,1],[2,3],[4,5],[6,7],[8,9]]、y=[0,1,2,3,4]を、test_size=0.33、random_state=42で分けています。

  • 学習用のXは[[4,5],[0,1],[6,7]]、yは[2,0,3]です。
  • テスト用のXは[[2,3],[8,9]]、yは[1,4]です。
  • 5件が、学習用3件・テスト用2件に分かれています。

結論: random_state=42で分けた結果は、公式文書に載っている形に再現できます。Xの行とyの値は、同じ番号どうしがそろって同じ側に入っています(Xの[4,5]とyの2など)。

例 2

モデルを2つ比べるのに、分割が毎回変わる場合

同じデータで、モデルAとモデルBの正解率を比べたいとします。

  • random_stateを指定しないと、AとBで分割が違う可能性があります。
  • このとき、正解率の差が、モデルの差なのか、分割の偶然なのか、判断できません。
  • random_stateに同じ整数を渡せば、同じ分割で比べられます。

結論: 比べる場面では、同じ整数を渡して分割をそろえます。

問題文から答えを選ぶ手順

  1. 1

    再現が必要かを確かめる

    同じコードで同じ結果を出したいかを確認します。試験の公式例のように結果の値が決まっているなら、必要です。

  2. 2

    整数を渡す

    random_stateに整数(公式例では0や42)を渡して、分割前のシャッフルを固定します。

  3. 3

    shuffleの設定を見る

    shuffleは既定でTrueです。shuffle=Falseなら、シャッフルをしないので、分割は並びの順になります。

  4. 4

    分割の割合を確かめる

    test_sizeとtrain_sizeがどちらもNoneなら、テスト用は0.25です。分割の件数は、割合から決まります。

試験での見分け方

  • 1random_stateは、分割の前に行うシャッフルを制御する引数である。
  • 2random_stateに整数を渡すと、複数回の呼び出しで再現できる出力になる。
  • 3random_stateの既定値はNoneで、再現できる出力にしたいときは整数を渡す。
  • 4shuffleの既定値はTrueで、shuffle=Falseのときはstratifyを指定できない。
  • 5test_sizeとtrain_sizeがどちらもNoneなら、テスト用の割合は0.25になる。

誤答しやすい選択肢

random_state=0とrandom_state=42で、意味が違うと考える

修正: どちらも整数を渡して分割を固定する指定です。値そのものに、特別な意味があるわけではありません。

random_stateを指定しなくても、毎回同じ分割になると考える

修正: 公式文書は、整数を渡すと複数回の呼び出しで再現できる出力になると説明しています。指定しない場合は、そうなるとは説明されていません。

random_stateが、学習用とテスト用の割合を決めると考える

修正: 割合を決めるのはtest_sizeとtrain_sizeです。random_stateが制御するのは、分割の前に行うシャッフルです。

shuffle=Falseでもrandom_stateでシャッフルされると考える

修正: shuffle=Falseは、分割の前にシャッフルをしない指定です。random_stateが制御する対象のシャッフルを行いません。

確認問題

Q1train_test_splitのrandom_stateに整数を渡すと、何が起こりますか?

答え: 分割の前に行うシャッフルが固定され、複数回の呼び出しで再現できる出力になる

公式文書は、random_stateを、分割の前に行うシャッフルを制御する引数と説明し、整数を渡すと複数回の呼び出しで再現できる出力になるとしています。

Q2train_test_splitで、test_sizeとtrain_sizeをどちらも指定しないとき、テスト用の割合はいくつですか?

答え: 0.25

公式文書は、train_sizeもNoneなら、test_sizeは0.25に設定されると説明しています。

Q3試験の公式例にあるtrain_test_split(X, y, random_state=0)で、random_state=0が表す意味はどれに近いですか? ①0行目を除く ②テスト用を0件にする ③分割の乱数を固定する

答え: ③分割の乱数を固定する

random_stateは、分割の前に行うシャッフルを制御する引数です。0は、固定のために渡す整数です。

到達チェック

  • random_stateに整数を渡す理由を、再現性という言葉で説明できる
  • random_stateを指定しないと、再現できる出力が説明されない点を言える
  • random_stateとtest_sizeの役割の違いを答えられる
  • shuffle=Falseのときの分割の仕方を言える

同じ資格で次に知りたいこと

よくある質問

Qrandom_stateには、何の整数を渡せばよいですか?

A

公式文書は、整数を渡すと複数回の呼び出しで再現できる出力になると説明しています。公式の例は42、試験の公式例は0で、値そのものに意味はありません。

Qrandom_stateを指定しないと、どうなりますか?

A

既定値はNoneです。公式文書は、再現できる出力にするには整数を渡すと説明しているので、指定しない場合は、実行のたびに分割が変わりうると考えます。

Qrandom_stateは、テスト用の割合も決めますか?

A

決めません。割合を決めるのはtest_sizeとtrain_sizeで、どちらもNoneのときはテスト用が0.25です。random_stateは、分割の前に行うシャッフルを制御します。

Q試験にtrain_test_splitは出ますか?

A

Python3エンジニア認定データ分析試験の公式例に、make_pipeline・load_iris・train_test_split(X, y, random_state=0)・accuracy_scoreを使う例があります。出題の形式は、受験前に公式の案内で確認してください。

次に見る比較

執筆: AI資格ドリル編集部(運営者情報を見る)