コンテンツにスキップ

ランダムにデータを分割

1 つのデータを、行をランダムに選んで 2 つに分けます。機械学習で、モデルを作るためのデータと、できたモデルを試すためのデータを分ける用途が中心です。

条件で分けたいとき(「東京の行とそれ以外」など)は行フィルタ条件による分割を使ってください。こちらは値を見ずに行を選びます。

入出力

ポート内容
入力データデータ
訓練データ分けたデータの一方
検証データ分けたデータのもう一方

出力が 2 つあります。どちらにも同じ列が同じ順で並び、行が重なることはありません。2 つを足すと入力の行数になります。

Spark エンジンでも動きます。

設定項目

分割する割合を入力(0~1)必須
検証データ側の割合を、0 より大きく 1 より小さい数で入れます。既定は 0.5。0.2 なら検証データが 2 割、訓練データが 8 割です。
乱数シードを固定する
整数を入れると、毎回同じ分かれ方になります。空のままだと実行のたびに変わります。考え方は乱数シードを参照。

乱数シードを固定するかどうか

見るところ空のまま整数を入れる
同じデータを 2 回実行違う分かれ方になる同じ分かれ方になる
向いている場面分け方を変えて何度も試したい結果を再現したい・人に説明したい

ワークフローを共有したり、結果を比べたりするなら固定してください。 固定しないと、同じワークフローを実行し直すたびにモデルの精度が変わり、改善したのか偶然なのかが分からなくなります。

分け方の決まり

  • 行は完全にランダムに選ばれます。並び順や値は考慮しません
  • 目的変数の割合を揃えて分けること(層化抽出)はできません。 分類で偏りが問題になるときは、行フィルタ条件による分割で値ごとに分けてから、それぞれを分割してください
  • 検証データの行数は、割合 × 行数を切り上げた数です。0 行になることはありません
  • 訓練データの行数は、残りを切り捨てた数です。こちらが 0 行になる場合はエラーになります
  • 入力が 0 行のときは、エラーにならず列だけの空データが 2 つ出ます
入力の行数分割する割合訓練データ検証データ
100.55 行5 行
100.28 行2 行
100.059 行1 行
100.95エラー—
1どの値でもエラー—

エラーと対処

割合が範囲の外

0 以下、または 1 以上の値を入れたとき。

分割する割合は 0より大きく、1より小さい値を入力してください。

直し方 — 0.2 や 0.3 のように、0 と 1 の間の小数を入れてください。20(パーセントのつもり)や 1 は使えません。

行数が少なすぎる

割合に対して行が少なく、訓練データ側が 0 行になるとき。

入力データの行数が少ないため分割に失敗しました。

直し方 — 割合を小さくするか、入力の行数を増やしてください。10 行のデータに 0.95 を指定すると訓練データが 0 行になります。1 行しかないデータは、どの割合を入れてもこのエラーになります。

よく使う例

1. 8 対 2 に分ける

お題 — モデルを作る前に、よくある 8 : 2 で分けたい

入力 — 1000 行の購買データ

設定 — 分割する割合を入力(0~1) に 0.2、乱数シードを固定する に 42

出力 — 訓練データ 800 行、検証データ 200 行。シードを固定したので、実行し直しても同じ分かれ方になる

2. 分け方を変えて何度も試す

お題 — 分け方によって精度がどれくらいぶれるのかを見たい

入力 — 1000 行の購買データ

設定 — 分割する割合を入力(0~1) に 0.3、乱数シードを固定する は空のまま

出力 — 訓練データ 700 行、検証データ 300 行。中身は実行のたびに変わるので、何回か実行して精度の幅を見る

3. 小さいデータを分ける

お題 — 50 行しかないデータを分けたい

入力 — 50 行のアンケート結果

設定 — 分割する割合を入力(0~1) に 0.2、乱数シードを固定する に 1

出力 — 訓練データ 40 行、検証データ 10 行。ここから割合を下げると検証データが数行になり、精度の数字があてにならなくなる

4. 分けたデータをあとで 1 つに戻す

お題 — 訓練データと検証データに別々の処理をしてから、1 つのデータに戻したい

入力 — 1000 行の購買データ

設定 — 分割する割合を入力(0~1) に 0.2、乱数シードを固定する に 42。それぞれに処理をつないだあと、単純な縦結合で 左右の共通列をすべて結合 にする

出力 — 1000 行に戻る。ただし行の順番は元のデータと同じにはなりません(訓練データの行が先、検証データの行が後ろ)

関連