機械学習のテストと検証 (機械学習ワークショップ 5)

機械学習の研究3と4については、Autumn Code Recordsで閲覧できます。

テストと検証

モデルが新しいケースにどの程度一般化しているかを知る唯一の方法は、実際に新しいケースでモデルを試してみることです。1 つのアプローチは、モデルを実稼働環境に導入し、そのパフォーマンスを監視することです。これは機能しますが、モデルが本当に悪い場合、ユーザーから苦情が来るでしょう。これは最良のアイデアではありません。

より良いオプションは、データをトレーニング セットとテスト セットの 2 つのセットに分割することです。名前が示すように、トレーニング セットを使用してモデルをトレーニングし、テスト セットを使用してモデルをテストします。新しいケースの誤差率は汎化誤差 (またはサンプル外誤差) と呼ばれ、テスト セットでモデルを評価することでこの誤差の推定値を取得できます。この値は、これまでに見たことのないインスタンス上でモデルがどの程度うまく機能するかを示します。

トレーニング誤差が低い (つまり、モデルがトレーニング セットでほとんどミスをしない) が、汎化誤差が高い場合は、モデルがトレーニング データを過学習していることを意味します。

通常、データの 80% がトレーニングに使用され、データの 20% がテスト用に予約されます。ただし、これはデータセットのサイズによって異なります。データセットに 1,000 万個のインスタンスが含まれている場合、1% を維持すると、テスト セットには 100,000 個のインスタンスが含まれることになり、汎化誤差の適切な推定値を取得するには十分である可能性があります。

ハイパーパラメータの調整とモデルの選択

モデルの評価は簡単です。テスト セットを使用するだけです。しかし、線形モデルと多項モデルの 2 種類のモデルの間で迷っているとします。どちらを選択すればよいでしょうか? 1 つのオプションは、両方をトレーニングし、テスト セットを使用してそれらがどの程度一般化されるかを比較することです。

ここで、線形モデルの方が一般化が良好ですが、過剰適合を避けるために何らかの正則化を適用したいとします。問題は、正則化ハイパーパラメータの値をどのように選択するかです。1 つのオプションは、このハイパーパラメータの 100 個の異なる値を使用して 100 個の異なるモデルをトレーニングすることです。汎化誤差が最も低いモデル (たとえば、わずか 5% の誤差) を生成する最適なハイパーパラメータ値を見つけたとします。このモデルを運用環境に導入しましたが、残念ながら期待どおりに動作せず、15% のエラーが発生しました。今何があったの?

問題は、テスト セットで汎化誤差を複数回測定し、その特定のセットに最適なモデルを生成するようにモデルとハイパーパラメーターを調整したことです。これは、モデルが新しいデータに対して適切に実行される可能性が低いことを意味します。

この問題に対する一般的な解決策は、ホールドアウト検証 (下図) と呼ばれます。トレーニング セットの一部をホールドアウトするだけで、複数の候補モデルを評価し、最適なモデルを選択できます。新しく保持されたセットは、検証セット (または開発セットまたは開発セット) と呼ばれます。具体的には、縮小したトレーニング セット (つまり、完全なトレーニング セットから検証セットを除いたもの) でさまざまなハイパーパラメーターを使用して複数のモデルをトレーニングし、その検証セットで最高のパフォーマンスを発揮するモデルを選択します。この検証プロセスが保存された後、完全なトレーニング セット (検証セットを含む) で最適なモデルをトレーニングすることができ、最終的なモデルが得られます。最後に、テスト セットの最終モデルを評価して、汎化誤差の推定値を取得します。

ここに画像の説明を挿入

通常、この解決策はかなりうまく機能します。ただし、検証セットが小さすぎると、モデルの評価が不正確になり、誤って次善のモデルを選択してしまう可能性があります。逆に、検証セットが大きすぎる場合、残りのトレーニング セットは完全なトレーニング セットよりもはるかに小さくなります。これがなぜ
悪いのでしょうか? 最終的なモデルは完全なトレーニング セットでトレーニングされるため、はるかに小さいトレーニング セットでトレーニングされた候補モデルを比較するのは理想的ではありません。それはマラソンで最も速いスプリンターを選ぶようなものです。この問題を解決する 1 つの方法は、多数の小さな検証セットを使用して相互検証を繰り返し実行することです。残りのデータでトレーニングした後、各モデルは検証セットごとに 1 回評価されます。モデルのすべての評価を平均することで、モデルのパフォーマンスをより正確に測定できます。ただし、トレーニング時間に検証セットの数が乗算されるという欠点もあります。

データの不一致

場合によっては、トレーニング用に大量のデータを簡単に取得できますが、このデータは実稼働で使用されるデータを完全に表していない可能性があります。たとえば、花の写真を撮り、その種類を自動的に判断するモバイル アプリケーションを作成するとします。ウェブ上では何百万枚もの花の写真を簡単にダウンロードできますが、それらはモバイル デバイスのアプリで実際に撮影した写真を完全に表しているわけではありません。おそらく、代表的な写真 (実際にアプリを使用して撮影した写真) が 1,000 枚しかないかもしれません。

この場合、覚えておくべき最も重要なルールは、検証セットとテスト セットの両方が運用環境で使用されることが予想されるデータを可能な限り代表するものである必要があるということです。そのため、それらは完全に代表的なイメージで構成されている必要があります。これらをシャッフルして、半分を配置することができます。検証セットとテスト セットの残りの半分 (どちらのセットにも重複または重複に近いものが存在しないことを確認してください)。Web 画像でモデルをトレーニングした後、検証セットでモデルのパフォーマンスが期待外れであることが観察された場合、それがモデルのパフォーマンスがトレーニング セットを上回ったためなのか、それとも単に Web 画像とモバイル アプリの画像間の不一致が原因なのかはわかりません。

解決策の 1 つは、(ネットワークからの) トレーニング画像を別のセットに入れることです。AndrewNg はこれを training-dev セットと呼んでいます (下の図)。モデルを (train-dev セットではなくトレーニング セットで) トレーニングした後、train-dev セットで評価できます。モデルのパフォーマンスが低い場合は
、トレーニング セットを過学習しているはずです。そのため、モデルを単純化または正規化し、より多くのトレーニング データを取得し、トレーニング データをクリーンアップする必要があります。ただし、train-dev セットで良好なパフォーマンスが得られる場合は、dev セットでモデルを評価できます。パフォーマンスが低い場合、問題はデータの不一致にあると考えられます。この問題を解決するには、モデルをトレーニングする前に Web 画像を前処理して、モバイル アプリが取得する画像に近づけることができます。train-dev セットと dev セットの両方で良好なパフォーマンスを示すモデルを取得したら、それをテスト セットで最後にもう一度評価して、本番環境でどの程度良好にパフォーマンスするかを確認できます。

ここに画像の説明を挿入

図に示されています。実際のデータが不足している場合 (右)、同様に豊富なデータでトレーニングし (左)、データの一部を train-dev セットに保持して過学習を評価し、実際のデータを使用してデータの不一致 (開発セット) を評価し、評価することができます。最終モデル(テストセット)のパフォーマンス。

                                    ##### 没有免费的午餐定理

モデルはデータを簡略化して表現したものです。単純化は、新しいインスタンスに一般化される可能性が低い冗長な詳細を破棄するために行われます。特定のタイプのモデルを選択すると、データについて暗黙的に仮定を行うことになります。たとえば、線形モデルを選択した場合、データは本質的に線形であり、インスタンスとラインの間の距離は単なるノイズであり、無視しても安全であると暗黙的に仮定することになります。

David Wolpert は、1996 年の有名な論文で、データについてまったく仮定をしないのであれば、あるモデルを他のモデルよりも優先する理由はないことを実証しました。これはいわゆる「ノー・フリー・ランチ」(NFL)の定理です。一部のデータセットでは、最適なモデルは線形モデルですが、他のデータセットでは、最適なモデルはニューラル ネットワークです。どのモデルも、より良く機能することがアプリオリに保証されているわけではありません (それが定理の名前の由来です)。どのモデルが最適かを判断する唯一の方法は、すべてのモデルを評価することです。これは不可能であるため、実際には、データについて合理的な仮定をいくつか立て、少数の合理的なモデルのみを評価します。たとえば、単純なタスクの場合はさまざまなレベルの正則化を使用して線形モデルを評価でき、複雑な問題の場合はさまざまなニューラル ネットワークを評価できます。

練習する

機械学習における最も重要な概念のいくつかを紹介しました。今後のラボではさらに詳しく掘り下げてさらにコードを記述しますが、その前に、次の質問に答えられることを確認してください。

  • 1. 機械学習をどのように定義しますか?
  • 2. 最も得意とする 4 つのアプリケーションの種類を挙げていただけますか?
  • 3. ラベル付きトレーニング セットとは何ですか?
  • 4. 最も一般的な 2 つの監督タスクは何ですか?
  • 5. 一般的な監視されていないタスクを 4 つ挙げていただけますか?
  • 6. ロボットをさまざまな未知の地形で歩かせるには、どのような種類のアルゴリズムを使用しますか?
  • 7. 顧客をグループに分類するためにどのような種類のアルゴリズムを使用しますか?
  • 8. スパム検出問題を教師あり学習問題と定義しますか?それとも教師なし学習問題と定義しますか?
  • 9. オンライン学習システムとは何ですか?
  • 10. 核外学習とは何ですか?
  • 11. 類似性測定に依存して予測を行うアルゴリズムはどのようなものですか?
  • 12. モデル パラメーターとモデル ハイパーパラメーターの違いは何ですか?
  • 13. モデルベースのアルゴリズムは何を検索しますか? 彼らが成功するための最も一般的な戦略は何ですか? 彼らはどうやって予測を立てているのでしょうか?
  • 14. 機械学習の 4 つの主な課題を挙げていただけますか?
  • 15. モデルがトレーニング データではうまく機能するが、新しいインスタンスへの一般化が不十分な場合はどうなりますか? 考えられる解決策を 3 つ挙げていただけますか?
  • 16. テスト セットとは何ですか?なぜ使用されますか?
  • 17. 検証セットの目的は何ですか?
  • 18. train-dev セットとは何ですか?いつ必要になり、どのように使用するのですか?
  • 19. テスト セットを使用してハイパーパラメータを調整するとどうなりますか?

おすすめ

転載: blog.csdn.net/coco2d_x2014/article/details/132511371