ディープラーニングを学習していると、train_test_split()という関数に遭遇しました。
最初見たときは「この名前が長い関数何?」と思いました。
今回はそんな名前の長いtrain_test_split関数について解説します。
訓練とテスト
まず、機械学習は通常用意したデータを入力し、得られた結果と実際の結果を比較し修正を行うことを繰り返すことによって学習しています。
一般的な学習ではデータを全て訓練用に使います。
しかし、機械学習では用意したデータを訓練データと評価用のテストデータに分ける方法があります。
なぜわざわざ分けるのかというと、偏った学習を無くすためのようです。
例えば、日本語を学習させようと思ったとします。
この学習モデルによって、日本語の学習が上手くいって、ある程度は日本語を認識できるようになったとします。
しかし、ここで学習されているのはあくまで学習に用いられた人の日本語なのです。
日本には多くの地方がありそれぞれで言葉や口調が違っていたりします。
もし、訓練データに口調の偏りが起こっていたとするとここで学習した日本語は汎用的な日本語とは言えず、日本語をちゃんと認識しているとは思えないです。
そこで、訓練データによる言葉や口調の偏りを出来るだけ無くすために、テストデータでテストし学習結果を評価するのです。
train_test_split()
では、train_test_split関数とは何なのでしょうか。
この関数は、名前の通りtrain(訓練)とtest(テスト)にsplit(割る)関数です。
つまり、引数に指定した配列や行列を訓練データとテストデータに分割する関数です。
関数の書式は次のようになっています。
sklearn.model_selection.train_test_split(*arrays, test_size=None, train_size=None, random_state=None, shuffle=True, stratify=None)
*arrays
分割するデータの配列、行列を指定します。
配列は、複数指定することも可能です。複数指定した場合は、それぞれの配列で分割されます。
test_size,train_size
テストデータと訓練データの割合を0.6や055などの小数点で設定することが出来ます。
デフォルトでは、テストが25%、訓練が75%となっています。
random_state
複数回データの分割を行った場合にデータの分割の仕方を毎回変えるかどうかを指定します。
デフォルトでは、Noneになっているので毎回分割の仕方は固定となっています。
shuffle
入力の前にデータを一度シャッフルするかを指定します。
まとめ
- ・テストデータと訓練データに分けることによって、偏った学習を防ぐことが出来る
- ・train_test_split()関数は、配列・行列を指定した割合で分割することが出来る
コメント