データセット全体を使用して最終モデルをトレーニングする方が常に良いですか?


24

好みの機械学習モデルをトレーニング、検証、テストした後の一般的な手法は、テストサブセットを含む完全なデータセットを使用して、製品などに展開する最終モデルをトレーニングすることです。

私の質問は、そうすることは常に最善のことですか?実際にパフォーマンスが低下した場合はどうなりますか?

たとえば、テストサブセットの分類でモデルのスコアが約65%である場合を想定します。これは、モデルのトレーニングが不十分であるか、テストサブセットが外れ値で構成されていることを意味します。後者の場合、それらを使用して最終モデルをトレーニングするとパフォーマンスが低下し、展開後に初めて確認できます。

最初の質問の言い換え:

高価なロケット実験に搭載された組み込み電子機器にモデルを展開するなど、モデルの1回限りのデモンストレーションがあった場合、最終ステップでテストサブセットを使用して再トレーニングされたモデルを信頼できますか?新しいパフォーマンスでテストしましたか?

回答:


14

モデルの最適なハイパーパラメーターを取得したら、トレーニングや相互検証などを行った後、理論的にはデータセット全体でモデルをトレーニングして本番環境に展開しても構いません。これは、理論的にはより一般化されます。

ただし、テストデータセットがなくなったため、テストデータに対して統計的/パフォーマンスを主張することはできなくなりました。

トレーニングデータセット全体を使用してモデルを運用環境に展開し、新しい受信データ(つまり、運用モデルが予測を行うデータ)のターゲット変数の真の値を知っている場合、リアルタイムパフォーマンスメトリックを次のように計算できます。この新しいデータはテストデータのようなものです(トレーニング中にモデルには見えませんでした)。このプロセスから、モデルのハイパーパラメーターを更新して、パフォーマンスを向上させることができます。

しかし、新しいデータの目標値を知っていた場合、そもそもなぜモデルをトレーニングするのでしょうか?

一般に、十分な種類の十分なデータがあり、データをシャッフルして分割する場合、堅牢なモデルをトレーニングするには80:20トレーニング:テストで十分であり、一般化の問題を心配する必要はありません(もちろん、モデル)。


+1、答えてくれてありがとう!80/20に分割する前のデータセットのランダムシャッフルは、おそらく「統計的に」自信を持っているように思われます(:
pcko1

2
保持されたテストセットのパフォーマンスは、正しく実行している限り、母集団全体に一般化されるはずです。メソッドをデータセット全体に適用した後のテストセットはありませんが、元の相互検証されたトレイン/テストセットのパフォーマンスは、トレーニングアルゴリズムのパフォーマンスの公平な推定量です。これがCVの重要なポイントです。モデルのトレーニングやパラメーター化ではなく、モデル構築プロセスのパフォーマンスの推定です。フルデータモデリングする前にすべてのテスト・セットでのあなたのパフォーマンスがあり、完全なデータのパフォーマンスの見積もり。
原子力王

13

興味深い質問。私は個人的に生産に入る製品については見ていませんが、論理を理解しています。

理論的には、デプロイされたモデルが多くのデータを見るほど、一般化する必要があります。したがって、利用可能なデータの完全なセットでモデルをトレーニングした場合、完全なデータセットからたとえばtrain / valセット(たとえば〜90%)のみを見たモデルよりも一般化する必要があります。

これに関する問題(および最初にデータをtrain / val / testセットに分割する理由!)は、見えないデータの正確性に関して統計的な主張をしたいということです。すべてのデータでモデルを再トレーニングするとすぐに、そのような主張をすることはできなくなります。

[編集]

ここで交差検定に関連する質問受け入れ答えは私に似たポイントを作り、物事の他の方法に言及し、。


ループします:

  1. モデルを訓練する
  2. モデルを変更する
  3. ステップ1に進みます
  4. テストセットのパフォーマンスを評価する
  5. ステップ5で見つかったテスト精度を備えた現在のモデル

最終的に、テストセットで素晴らしいスコアを取得できた場合、それが一般化されていると主張できます。したがって、完全なデータセットでの再トレーニングが将来の不可視データのパフォーマンスを改善するかどうかについての質問は、厳密にテストできるものではありません。他の関連する問題セットでのパフォーマンスの向上の経験的証拠は、決定を下す必要がある時点での唯一のソースまたはガイダンスになります。

健全性チェックは、元のテストセットで再トレーニングされた最終モデルを再度テストすることです。トレーニング中に実際にテストセットが表示されたため、モデルがtrain / valセットのみを表示したときよりも高いスコアを期待しています。これにより、この最終モデルが将来のすべてのケースで優れていると100%確信することはできませんが、少なくとも、与えられたデータで可能な限り良好です。

おそらく、あなたの言うこと(おそらく学問的には動きません)を行うことに対して、より厳密な議論があるかもしれませんが、実際の応用には魅力的です!


+ +1、あなたの努力のために、そのポストを指摘しておかげで、私はそれを逃しました!最終的にトレーニングデータセット全体でモデルをテストするという提案については、その結果から貴重な洞察を得ることはできないと思います。アルゴリズムの訓練は通常、コスト関数の最適化に基づいているという理由だけで、そのために訓練モデルは、最適なトレーニングデータを与えています。列車データの精度が低いということは、それが最適ではないということではなく、単にそのデータセットと選択されたアルゴリズムアーキテクチャを考えると、それだけでは改善できないということです。それによって、外部の有効性について何も推測できません。
pcko1

1
どういたしまして!(私は起点に、最終的な訓練を受けたモデルをテストするために言ったが、私は完全にあなたの声明に同意した試験訓練、データではありません)。いずれにせよ、最終的なモデルがまったく予期しないことをしていないことをただ見たいだけです。理論と実践が常に一致するとは限りません:)
n1k31t4

6

統計的機械学習について強調する必要がある点は、保証がないことです。保留セットを使用してパフォーマンスを推定する場合、それは単なる推定値です。見積もりは間違っている可能性があります。

これにはある程度慣れる必要がありますが、慣れる必要があります。「パフォーマンスが実際に低下した場合はどうなりますか?」と言うとき、答えは確かです。実際のパフォーマンスは、予想/予測よりも悪化する可能性があります。また、より良いかもしれません。両方が可能です。それは避けられないのです。固有の既約の不確実性があります。

保留テストセットを使用してパフォーマンスを評価する場合、過去のデータを使用して将来のパフォーマンスを予測しようとしています。彼らが言うように、過去のパフォーマンスは将来の結果を保証するものではありません。これは私たちが受け入れなければならない人生の事実です。

これはあなたを不動にすることはできません。予想よりも悪い結果を出す可能性があるという事実は、データでトレーニングされたモデルを本番環境に展開することを避ける理由にはなりません。特に、あなたがそうしなければ、うまくやらないこともあります。すべてのデータでトレーニングされたモデル(train + validation + test)は、train + validation部分のみでトレーニングされたモデルよりも悪化する可能性があります。それが良くなる可能性もあります。だから、保証を探すのではなく、自分自身に問いかける必要があります。何が私たちに成功の最高のチャンスを与えるのでしょうか?最も効果的なものは何ですか?

そして、この場合、本番環境にデプロイする場合、利用できるすべてのデータを使用することが最善です。期待されるパフォーマンスの観点から、すべてのデータを使用することは、一部のデータを使用することより悪くはなく、潜在的にはより良いことです。したがって、利用可能なすべてのデータを使用して、生産モデルを構築するときにモデルをトレーニングすることもできます。統計的な方法を使用するときはいつでも、物事はまだうまくいかない可能性があります-しかし、これは物事がうまくいくための可能な限り最高のチャンスを与えます。

特に、標準的なプラクティスは次のとおりです。

  1. 一部のデータを保留されているテストセットに予約します。どの分数を使用するかについての厳格なルールはありませんが、たとえば、テストセット用に20%を予約し、トレーニングと検証用に残りの80%を保持できます。通常、すべての分割はランダムでなければなりません。

  2. 次に、トレーニングデータと検証データを使用して、複数のアーキテクチャとハイパーパラメーターを試し、可能な限り最適なモデルを見つけるために実験します。トレーニングと検証のために保持された80%を取得し、トレーニングセットと検証セットに分割し、トレーニングセットを使用してモデルをトレーニングし、検証セットでその精度を測定します。相互検証を使用している場合、この分割を何度も行い、検証セットで結果を平均化します。そうでない場合は、単一の分割(たとえば、80%の70%/ 30%分割など)を実行し、検証セットでパフォーマンスを評価します。あなたがしようとする多くのハイパーを持っている場合は、ハイパーの各候補設定の後にこれを行います。あなたがしようとする多くのアーキテクチャを持っている場合は、各候補アーキテクチャのためにこれを行います。あなたは「何を使用して、これを繰り返すことができます

  3. 満足したら、アーキテクチャ、ハイパーパラメータなどの選択を凍結します。これで実験は完了です。一度このポイントに到達すると、他のオプションを再度試すことはできません(新しいテストセットを取得することなく)。したがって、準備が整ったと確信するまでこのポイントに到達しないでください。

  4. 準備ができたら、前に選択したアーキテクチャとハイパーパラメーターを使用して、完全なトレーニング+検証セット(その80%)でモデルをトレーニングします。次いで、保持アウトテストセットにその精度を測定します。つまり、このモデリング手法がものになるかどうか、正確なため、あなたの推定/予測です。あなたはここで、単一の番号を取得します。その数は、それが何であるかです:あなたがそれに満足していないなら、あなたはステップ1と2に戻って、さらに実験をすることができません。それは無効になります。

  5. 最後に、実稼働で使用するために、データセット全体でモデルをトレーニングし、トレーニング+検証+テストセットを使用して、実稼働で使用することができます。この生産モデルの精度を測定することはありません。これを行うためのデータが残っていないためです。すでにすべてのデータを使用しています。性能の推定値が必要な場合は、ステップ4の推定精度を本番環境での性能の予測値として使用する権利があります。これは、将来のパフォーマンスの利用可能な最良の予測値です。いつものように、保証はありません-入手可能な情報を考えると、それは可能な限り最良の見積もりです。あなたが予想したよりも悪いことをしたり、あなたが予想したよりも良いことをすることは確かに可能です-それは常に真実です。


私は完全には同意していませんが、努力を+1しました。たとえば、「期待されるパフォーマンスの観点から、すべてのデータを使用することは、一部のデータを使用することより悪くはなく、潜在的に優れている」と述べた場合などです。その背後にある理由はわかりません。一方で、あなたが言及した2番目のポイントは非常に重要なようです、相互検証です!したがって、基本的にはすべてのサンプルでトレーニング/検証を行うため、選択した最終モデルの外れ値を拒否する可能性があります。ご回答有難うございます。
pcko1

@ pcko1、原理は簡単です。データがある場合、そのすべてを使用する必要がありますか、それとも一部を使用する必要がありますか?どうして?データを取得したら、何かをする前に、データの10%を取得して破棄し、決して見ないでください。実際、一部を破棄するのが良い場合は、さらに多くを破棄することがさらに良いため、すべてのデータを破棄する必要があります。馬鹿げてるよね?どうして?理由を理解できるかどうかを確認し、それをこの状況に適用してみてください。うまくいけば、これで考えられるようになります!
DW

3

データセットを持つ理由の1つは、過剰適合を避けるためです。相互検証を使用する場合、基本的にデータセット全体をトレーニングセットとして機能させることができますが、再トレーニングではオーバーフィットの兆候があるかどうかを検証できません。どちらの方法(クロス検証またはデータセット全体での再トレーニング)も結果を劇的に変更することはないはずですが(私の無知な推測から)、ハイパーパラメーターの調整を実行したり、モデルのパフォーマンスを検証したりすることはできませんテストセットがあります。良くなるかどうかは言うのは難しいですが、知るための唯一の方法は、時間の経過とともに実際のデータで2つのモデルのA / Bを行うことだと思います。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.