Chomado's Blog
You Are Reading

AI 学習サービス Aidemy 受講メモ 06 「機械学習におけるデータ分割方法」(ホールドアウト法, k-分割交差検証, LOO)

0
機械学習

AI 学習サービス Aidemy 受講メモ 06 「機械学習におけるデータ分割方法」(ホールドアウト法, k-分割交差検証, LOO)


AI 学習サービス Aidemy (アイデミー) の、3 か月コース「AIマーケティングコース」を
一部体験させていただけることになりました!
なので、そこで学んだことを、皆さまにもシェアできればと思い、授業メモを取ることにしました。
(もちろん、私のこの個人メモを見るよりも 実際の Aidemy さんの動画教材 を見た方が 1024 倍勉強になります)

(前回の記事:『AI 学習サービス Aidemy 受講メモ 05 「機械学習にデータはどれくらい必要なのか?」(転移学習, アルゴリズムチートシート)』)

今日の話題- 学習データの使い方

今日は、学習データの使い方について勉強しました。

機械学習するとき
手元のデータを「学習用」と「テスト用」に分割するわけだけど
そのやり方 3 種類を学びました💡

  1. シンプルな「 ホールドアウト法 (holdout method)」(8:2 くらいに2分割)
  2. k 分割してうち 1 つをテストデータにして k 回まわす「k-分割交差検証 (クロスバリデーション) (K-fold cross-validation)」
  3. ひとつだけ抜き出してテストデータとし、残りを学習に回す「Leave-One-Out (一個抜き交差検証)」

元動画、元教材

すべて Aidemy (アイデミー) さんの コンテンツです。

形式 リンク
動画 2.2.1 データの分割
テキスト 2.2.2 学習データとテストデータ
テキスト 2.2.3 ホールドアウト法の理論と実践
テキスト 2.2.4 k-分割交差検証の理論
テキスト 2.2.5 k-分割交差検証の実践
YouTube 動画 (VTuber 版) データの分割

機械学習 と 統計学 の違い

機会学習データの分割
(画像:『データの分割』より)

. 機械学習 統計学
目的 モデルを構築し、未知のデータを予測・分類するための学問体系 データを解析し、そのデータに至った背景を説明するための学問体系
データの使い方 手持ちのデータは分割する:学習用とテスト用(と検証用) 分割はしない
同じような例 教師あり学習 (回帰) 重回帰分析

「テストデータ」を用意する必要

「テストデータ」を別に用意する理由としては、 機械学習が「未知のデータについて予測する」ことを目的とした学問体系であることが挙げられます。
「画像認識」「株価予測」「ニュース記事のカテゴリ分け」など、機械学習は様々な用途に活用されますが、どの場合でも「未知のデータ」を、学習済みモデルに当てはめて予想データを出力するという部分は共通です。
そのため、構築した学習モデルの評価には、テストデータという未知のデータが必要となります。

(引用元:Aidemy『2.2.2 学習データとテストデータ』より)

データの分割の方法

2 つに分ける場合

機械学習のデータの2分割

  1. 学習用
  2. テスト用
先生「全データのうち、8 割くらいを学習に使うケースが多いわ。残りの 2 割くらいをテスト用データに使って(モデルの精度を)検証する、というような流れね」

3 つに分ける場合

正答率をもとにモデルのチューニングを行う場合、検証用データを使って検証を行います。

機械学習のデータの3分割

(本家動画のページの下に「お詫びと訂正」として掲載されている内容を踏まえて、上の動画スクショには私自身で「学習用」「検証用」「テスト用」の文字入れをしてあります)

データ種類 用途
1 学習用 (訓練用) モデルの学習用
2 検証用 学習済みモデルが汎用性があるのかどうかの検証用
3 テスト用 (最終評価用) 最終評価用。モデルの精度をテスト。最後の最後に使う。(上二つのデータに全く関わっていないテストデータで精度を確認したいので)

学習データとテストデータの分割手法

学習用データとテストデータの分割の方法にはいくつかの手法があり、
代表的な 3 つを学んだ。

  1. Hold-out (ホールドアウト法)
  2. Cross Validation(クロスバリデーション法)(交差検証)
  3. Leave One Out

1. Hold-out (ホールドアウト法)

ホールドアウト法は、
与えられたデータセットを

  1. トレーニングデータ
  2. テストデータ

の 2 つに分けて使用するというシンプルな手法です。

(引用元:Aidemy『2.2.3 ホールドアウト法の理論と実践』)

Python のオープンソース機械学習ライブラリ scikit-learn を使う場合、
train_test_split 関数を使用します。

例)80 % を学習データ、20 % をテストデータに回す場合


X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

# X...正解ラベル以外の配列
# y...Xに対する正解ラベルの配列
# X_train...トレーニングデータのデータセット(正解ラベル以外)
# y_train...トレーニングデータの正解ラベル
# X_test...テストデータのデータセット(正解ラベル以外)
# y_test...テストデータの正解ラベル
# test_size...テストデータの割合

(↓ Aidemy 『2.2.3 ホールドアウト法の理論と実践』の演習問題の画面。こうやって web ブラウザ上で Python のコードを実際に書いて走らせてすぐに正解が分かるのすごく良い)
ホールドアウト法

2. Cross Validation(クロスバリデーション法)(交差検証)

k-分割交差検証(クロスバリデーション)では、
用意したトレーニングデータセットを k 分割し、
そのうちの 1 つをテストデータ、
残りの k-1 個を学習データ

として使用します。

そして、 学習と評価を繰り返して得られる k 個のモデルと性能評価から平均性能を算出 するという手法です。

(引用元:Aidemy『2.2.4 k-分割交差検証の理論』)

k-分割交差検証 は、ホールドアウト法よりも k 倍の演算が必要ということになるね。

k = 10 の場合の k-分割交差検証の様子

k-分割交差検証

(画像:Aidemy『2.2.4 k-分割交差検証の理論』より)

Python のオープンソース機械学習ライブラリ scikit-learn を使う場合、
cross_val_score 関数を使用します。(公式ドキュメント)

例)k=5 の場合の k-分割交差検証

#  X は正解ラベル以外のデータセットの配列、y は正解ラベルの配列
scores = model_selection.cross_val_score(svc, X, y, cv=5)

3. Leave One Out(一個抜き交差検証)(LOO クロスバリデーション)

k-分割交差検証には、 一個抜き交差検証(Leave-One-Out:LOOクロスバリデーション) という手法もあります。

LOO では、k にデータ数と同じ値を設定して、データを 1 つずつ分割し、そのうちの 1 データのみをテストデータとして扱います。

(引用元:Aidemy『2.2.4 k-分割交差検証の理論』)

計算回数がすごいことになりそうだから、LOO やる場合はデータ分割数が少ない場合が良さそうだね

どれを使えばいい?

いろいろ方法があるのは分かりましたが、どれを選べばよいのか分からず。
ググったら分かりやすい記事『機械学習、ディープラーニングでの学習データとテストデータの分割手法について』があったので、ここで紹介させてください。

データサンプル数 データ分割方法 コメント
~ 10 個 少な過ぎる
~ 100 個 Leave One Out LOO が有効。とはいえデータサンプル数がまだ少ないので、モデルの精度はあまり良くならない
~ 1,000 個 Cross Validation (交差検証)
10 分割(10-fold cross validation)
LOO も件数によっては有効だが計算に時間がかかる
~ 10,000 個 Cross Validation (交差検証) で 10 分割以内か
Hold-out (ホールドアウト法)
この量の学習サンプル数となると、マシンスペックが非常に重要になる
~ 100,000 個 Hold-out (ホールドアウト法) この量のデータサンプル数になると、ホールドアウト以外無理。
また、マシンスペックやアルゴリズムが非常に重要になる
それ以上 (難しい) 超高性能なマシンスペックが必要となる。研究施設での超最先端な技術みたいな世界

(引用元記事:『機械学習、ディープラーニングでの学習データとテストデータの分割手法について』)

当日のツイート

学んだことをツイートしたらわりと反応があったので
これからも学びながらツイートしていこうと思います

Next Step

次回は「過学習」について勉強します


Madoka Chomado (ちょまど)

千代田まどかです。よく「ちょまど」と呼ばれます。Microsoft 社員。文系出身プログラマ兼マンガ家です。

(2) Comments

  1. […] (次回の記事:『AI 学習サービス Aidemy 受講メモ 06「教師あり機械学習におけるデータ分割方法」(ホールドアウト法, k-分割交差検証, LOO)』) […]

コメントを残す

メールアドレスが公開されることはありません。