用語比較
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どこで迷っているかを切り分ける
試験の公式例にrandom_state=0があって、意味が分からない人
公式例は、train_test_split(X, y, random_state=0)で学習用とテスト用に分けています。0という数に意味はなく、分割の乱数を固定して、同じ結果を再現するための指定です。
実行するたびに正解率が変わって、困っている人
random_stateを指定しないと、分割が実行のたびに変わりうるので、正解率もずれます。整数を渡して分割を固定すれば、モデルを変えた効果と分割の偶然を切り分けやすくなります。
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
再現が必要かを確かめる
同じコードで同じ結果を出したいかを確認します。試験の公式例のように結果の値が決まっているなら、必要です。
- 2
整数を渡す
random_stateに整数(公式例では0や42)を渡して、分割前のシャッフルを固定します。
- 3
shuffleの設定を見る
shuffleは既定でTrueです。shuffle=Falseなら、シャッフルをしないので、分割は並びの順になります。
- 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のときの分割の仕方を言える
関連ページで確認する
同じ資格で次に知りたいこと
- np.whereとnp.selectの違い|2択で値を選ぶか、複数の条件から選ぶか(Python3データ分析)
NumPyのnp.where(条件が真ならx、偽ならy)とnp.select(条件のリストと選択肢のリストから選ぶ)の違いを、条件の数、default、複数の条件が真のときの扱いで整理します。NumPy公式リファレンスの例で、np.selectの結果が0・-1・-2・42・16・25になる点つきです。
- NumPyのaxis=0とaxis=1の違い|列ごとの集計と行ごとの集計(Python3データ分析試験)
NumPyのaxis=0は列ごと、axis=1は行ごとに計算します。3行4列の配列でsum・min・cumsumの結果を並べ、pandasのmean(axis=1)との対応、間違えやすい点と確認問題をまとめます。
- sort_valuesとsort_indexの違い|列の値で並べるか、行のラベルで並べるか(Python3データ分析)
pandasのsort_values(列などの値で並べ替え)とsort_index(行や列のラベルで並べ替え)の違いを、並べる基準、by引数、欠損値の扱いで整理します。pandas公式リファレンスの例で、col1の値で並べると
NaNが末尾になり、indexで並べると1・29・100・150・234の順になる点つきです。
よくある質問
Qrandom_stateには、何の整数を渡せばよいですか?
公式文書は、整数を渡すと複数回の呼び出しで再現できる出力になると説明しています。公式の例は42、試験の公式例は0で、値そのものに意味はありません。
Qrandom_stateを指定しないと、どうなりますか?
既定値はNoneです。公式文書は、再現できる出力にするには整数を渡すと説明しているので、指定しない場合は、実行のたびに分割が変わりうると考えます。
Qrandom_stateは、テスト用の割合も決めますか?
決めません。割合を決めるのはtest_sizeとtrain_sizeで、どちらもNoneのときはテスト用が0.25です。random_stateは、分割の前に行うシャッフルを制御します。
Q試験にtrain_test_splitは出ますか?
Python3エンジニア認定データ分析試験の公式例に、make_pipeline・load_iris・train_test_split(X, y, random_state=0)・accuracy_scoreを使う例があります。出題の形式は、受験前に公式の案内で確認してください。
次に見る比較
- G検定・DS検定・統計検定2級で重なる用語10語の比較
同じ名前の用語の定義と収録章を、資格ごとに並べます。
- ベイズの定理と条件付き確率の違い(統計検定2級の式と計算例)
求める確率の向きの違いと、陽性になる確率の計算例を確かめます。
- 紛らわしい用語ペア早見表
混同しやすい用語の違いと判定の手掛かりを、資格別の一覧で確かめます。
執筆: AI資格ドリル編集部(運営者情報を見る)
