【機械学習】sklearnで訓練用・テスト用データで分割する方法

機械学習を行う際には「訓練用データ」と「テスト用データ」の2種類を用意する必要があります。

なぜなら、モデル作成後の精度の確認などモデルの評価を行う必要があるからです

今回はデータを簡単に分割できるtrain_test_split()関数の使い方をご紹介します。

目次

分割方法—train_test_split()

sklearn.model_selection.train_test_split

from sklearn.model_selection import train_test_split

sklearn.model_selectionからtrain_test_splitをインポートします。

使い方は簡単で、変数を4つ定義し、説明変数となるX、目的変数となるyを用意します。
今回は下記のようなデータを用意しました。

説明変数:X

sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)
0 5.1 3.5 1.4 0.2
1 4.9 3.0 1.4 0.2
2 4.7 3.2 1.3 0.2
3 4.6 3.1 1.5 0.2
4 5.0 3.6 1.4 0.2

目的変数:y

target_names
0 0
1 0
2 0
3 0
4 0

4つの変数は

  1. X_train
  2. X_test
  3. y_train
  4. y_test

と4つに分け、train_test_split()にXとyを入力します。

X_train, X_test, y_train, y_test = train_test_split(X, y)

これでできました。簡単ですねー。実際に分割できているか確認してみます。
pandasのshape()関数で見てみます。

print('X_train = {}'.format(X_train.shape))
print('X_test = {}'.format(X_test.shape))
print('y_train = {}'.format(y_train.shape))
print('y_test = {}'.format(y_test.shape))
X_train = (112, 4)
X_test = (38, 4)
y_train = (112, 1)
y_test = (38, 1)

きちんと分割できていますね。

分割割合を変更—train_size, test_size

train_size, test_sizeを引数として指定すると分割割合を変更できます。
引数を指定しない場合はテスト用データは全体の25%となります。

指定方法は0~1の中で指定し、30%の場合はtest_size=0.3とします。

テストデータは全体の2~3割にするのが一般的のようです。
3割にしてみます。

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
X_train = (105, 4)
X_test = (45, 4)
y_train = (105, 1)
y_test = (45, 1)

割合が変わりました。

シード値の固定—random_state

分割の際に、行は毎回ランダムに選択されます。
乱数を固定する際には、random_state=数値を引数とします。

X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=5)

乱数を固定することにより、違う環境で行ってもモデル作成の結果を統一できます。
試しに先頭行を見てみると

sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)
40 5.0 3.5 1.3 0.3
115 6.4 3.2 5.3 2.3
142 5.8 2.7 5.1 1.9
69 5.6 2.5 3.9 1.1
17 5.1 3.5 1.4 0.3

こんな感じになりました。

参考

この記事のサンプルコード

機械学習・データ処理を学ぶのにおすすめの教材

動画で学習するなら!

本気で取り組むならまずは相談!

じっくり書籍で学習するなら!

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!

コメント

コメントする

目次
閉じる