全2656文字
PR

 Pythonで機械学習モデルを開発する際、データの「確認」と「前処理」が終わったら、次にすべきはデータの「分割」です。

 本特集の初回で、データ分割には目的変数(正解データ)と入力変数(入力データ)の分割(左右分割)、訓練データと検証データの分割(上下分割)の二つがあるという話をしました。このうち、今回のデータセットでは、データを読み込んだ時点で目的変数と入力変数は分割されていたので、この目的での対応は不要です。

 しかし、もう一つの訓練データと検証データの分割はできていないのでこれから対応します。その具体的な実装が以下のコードです。

[画像のクリックで拡大表示]
訓練データと検証データの分割

 公開データセット読み込みのときに利用したライブラリであるscikit-learnを再び利用しています。今回利用するのはこのライブラリの中のtrain_test_split関数です。

 train_test_split関数を利用して以下の処理をします。

  • 元データのxとyをそれぞれ訓練データ(train)と検証データ(test)に分割します。
  • 分割結果はxについてはx_train とx_testに、yについてはy_trainとy_testに代入されます。
  • 分割の比率はtrain_sizeとtest_sizeの二つのパラメータで指定します。今回の例では7:3の比率で分割するため0.7と0.3の値を指定しています。
  • 分割前に元データに対して乱数を用いたシャッフルが行われます注1。シャッフルに用いる乱数の種(seed)の値がrandom_stateです。本特集全体の方針として、乱数を使った処理結果を極力記事内容と合わせるようにしています。そのため、共通処理で定義した定数値random_seedをrandom_stateのパラメータとして指定し、シャッフルの結果が必ず同じになるようにしています。

注1 今回利用したデータセットはたまたま最初からシャフルがかかった状態になっていましたが、データセットによっては正解データが0のものだけ最初に固まっていたりします。そのようなデータを分割した際にデータの偏りができないようにするため、シャフルする動作がデフォルトで入っています。

 データ分割の結果できた変数であるx_train、x_test、y_train、y_testそれぞれの次元数を、データフレームのshape属性を使って確認してみましょう。そのための実装が以下のコードになります。

データ分割結果の確認(要素数)
[画像のクリックで拡大表示]
データ分割結果の確認(要素数)

 結果を見ると、入力データと正解データのそれぞれが、7:3の比率で分割されています。

 次に分割したデータの中身の一部を見てみることにします。いつものようにデータフレームの先頭5行をhead関数で抽出し、その結果をdisplay関数にかけて整形した結果を表示します。具体的な実装は以下のコードです。

分割結果の確認(データの内容)
[画像のクリックで拡大表示]
分割結果の確認(データの内容)

 この結果から、左端のインデックスの数字がバラバラになっていて、データ分割のタイミングでシャッフルされていることが確認できます。