モデルの評価のためのデータ分割
#モデルの評価とチューニング
汎化能力を評価するためのデータ分割
未知のデータは得られない(当たり前)ので、過学習の程度を評価するには、手持ちのデータを分割して擬似的な未知のデータを用意し、これによって汎化能力を検証するのが一般的
手持ちのデータを学習データとテストデータに分けるのが基本
学習データ・・・学習に用いるデータ
テストデータ・・・モデルの検証用の、擬似的な未知のデータ
学習データに対する誤差が小さい(分類であれば分類精度が高い)だけでなく、テストデータに対する誤差が小さい(分類精度が高い)かどうかを見て、過学習していないか(汎化能力が高いか)を評価する
学習データとテストデータへの分割の方法
scikit-learnという機械学習のライブラリの中に、model_selectionという機能群があり、その中のtrain_test_splitという機能がある
これを使うと、簡単にデータを学習用とテスト用に分割できる
https://gyazo.com/db39888253f97dedb9ac89826b6b315b
手持ちのデータ(dfという名前のデータフレームに入れる)を説明変数(df_xという名前のデータフレームに入れる)と目的変数(df_yという名前のデータフレームに入れる)に分けたあとで、さらにこれらを、それぞれ以下のように分割する、ということを行う
df_x → train_x(学習データの説明変数)とtest_x(テストデータの説明変数)に分割
df_y → train_y(学習データの目的変数)とtest_y(テストデータの目的変数)に分割
(各データフレームの名前はこの通りでなくても構いません。自分がわかるように名前をつければOK。ただ慣れないうちは、このように名前をつけておくのが無難でしょう)
学習データとテストデータに分けるときの注意事項
データの前処理は、学習データとテストデータを分割する前に行うのではなく、分割後に、学習データをもとにした「基準」によって行わないといけない
分割前に処理をしてしまうと、テストデータの情報を学習時に使っていることになってしまう!
質的変数(カテゴリ変数)の変換は注意が必要。学習データにはあるがテストデータにはないラベルなどがありうる。対処の仕方はいくつか考え方がある