LoginSignup
0
1

【図解】もう迷わない、ホールドアウト検証法とクロスバリデーションの違い

Posted at

本記事は、データ分析初心者の私がよく迷ってしまう、モデル学習時のデータ分割の手法についてまとめます。

Kaggleで磨く機械学習の実践力によると、trainデータを全てモデルの学習に回すのではなく、trainデータの一部を使ってモデル学習、trainデータの残りを使ってモデルで推論してみて、その精度を確かめる。という手法が説明されています。

その際の手法が主に2つ紹介されているので、ここでそれらの違いを簡単にまとめます。

1.ホールドアウト検証法

データ分析初心者向けに紹介されている教材なんかでは、この手法がよく紹介されています。train_test_splitというコードを使います。

x_tr, x_va, y_tr, y_va = train_test_split(x_train,
                                          y_train,
                                          test_size=0.2,
                                          shuffle=True,
                                          stratify=y_train,
                                          random_state=123)

図解するとこんなイメージです!

スクリーンショット 2024-04-22 13.04.24.png

スクリーンショット 2024-04-22 13.06.29.png

分割した後モデル学習に使わずに2割取っておく事で、正解のyが分かっている状態でモデルを使って予測したy_predとyを比較でき、作ったモデルの性能を評価できるというわけです。
評価できるから、モデルをどんどん改変していき精度改善につなげられます。

2.CV(クロスバリデーション)

ホールドアウト検証法には1つ弱点があります。
それは、分割した2割のデータをモデル学習に使えないという事です。
より精度の高いモデルを作るという観点では、データが揃っている以上モデルの学習使いたいわけです。
そこで、ホールドアウト検証法をベースに、欠点を克服した手法がクロスバリデーションになります。考え方は簡単、ホールドアウト検証法を5回繰り返すというものです。

image.png

データの分割を行った後、以下の流れを5回繰り返します。
・モデル学習
・モデルを使って検証データのxを使ってy_predを予測
・検証データのyと、予測したy_predの差分を評価した指標(*)を計算する

5回繰り返したら、(*)の平均を取る事で、その値をモデルの評価とします。

かなり省略して説明しましたが、まずはこれくらいを抑えておけば良いです。

ではどのようなルールで分割するのか?

このような疑問を持てたら凄いです。ここでは簡単に紹介して終わりにします。

trainデータのyの分布が同じになるように分割

例えば、分割前のtrainデータのy全体の分布が正規分布に従っているとしたら、分割して8:2にする際もそれぞれが正規分布に従うように分割する、という事です。

image.png

この辺りは私もまだまだ勉強中なので、もっと知識をつけて行けたらと思います。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1