web-dev-qa-db-ja.com

相互検証とディシジョンツリーの理解に役立つ

私はディシジョンツリーとクロス検証について読んでいて、両方の概念を理解しています。しかし、それはディシジョンツリーに関係するので、相互検証を理解するのに苦労しています。基本的に相互検証では、データセットが比較的小さいときにトレーニングとテストを交互に実行して、エラー推定を最大化できます。非常に単純なアルゴリズムは次のようになります。

  1. 必要な折り目の数を決定します(k)
  2. データセットをk分割に分割する
  3. ツリーを構築するためのトレーニングセットにk-1分割を使用します。
  4. テストセットを使用して、ツリーのエラーに関する統計を推定します。
  5. 結果を後で使用できるように保存します
  6. テストセットの別の折り目を除いて、手順3〜6をk回繰り返します。
  7. 全体のエラーを予測するために、反復全体でエラーを平均化します

私が理解できない問題は、最後にk個のディシジョンツリーがあり、同じように分割されない可能性があるため、すべてが少し異なる可能性があることです。どのツリーを選択しますか?私が持っていた1つのアイデアは、エラーが最小限のものを選択することでした(ただし、指定された折りたたみで最高のパフォーマンスを発揮しただけでは最適にはなりません-おそらく層別化を使用すると効果がありますが、読んだすべてが少しだけ役立つと言っています)。

私が相互検証を理解しているので、ポイントは後でプルーニングに使用できるノード統計を計算することです。そのため、実際には、ツリー内の各ノードには、与えられたテストセットに基づいて計算された統計があります。重要なのはノード統計のこれらですが、エラーを平均化する場合。各ツリーが分割することを選択したもので異なる可能性がある場合、kツリー全体の各ノード内でこれらの統計をどのようにマージしますか?.

各反復で全体的なエラーを計算するポイントは何ですか?これは、剪定中に使用できるものではありません。

この小さなしわを助けていただければ幸いです。

31
chubbsondubs

私が理解できない問題は、最後にk個のディシジョンツリーがあり、同じように分割されない可能性があるため、すべてがわずかに異なる可能性があります。どのツリーを選択しますか?

相互検証の目的は、分類子(または決定木、またはその他の自動学習)の特定のインスタンスを選択するのに役立ちませんアプリケーション)ではなく、モデルを限定するために、つまり、平均エラー率、この平均に対する偏差などのメトリックを提供します。アプリケーションから期待できる精度のレベルを表明する際に。相互検証がアサートに役立つことができることの1つは、トレーニングデータが十分に大きいかどうかです。

特定のツリーの選択に関しての場合、代わりに、利用可能なトレーニングデータの100%でさらに別のトレーニングを実行する必要があります。これにより、通常、より優れたツリーが生成されます。 (相互検証アプローチの欠点は、[通常は少ない]量のトレーニングデータを「フォールド」に分割する必要があることです。質問で示唆するように、これは特定のデータインスタンスに対して過剰または不十分なツリーにつながる可能性があります) 。

デシジョンツリーの場合、ノードで収集され、ツリーのプルーニングに使用された統計への参照が何に関係するのかわかりません。たぶん、交差検定に関連するテクニックの特定の使用?...

23
mjv

最初の部分については、他の人が指摘したように、通常は最終モデルの構築にデータセット全体を使用しますが、一般化エラーのより良い推定を得るためにcross-validation(CV)を使用します新しい目に見えないデータについて。

2番目の部分については、CVを検証セットと混同していると思いますオーバーフィットを回避するために使用されます。分割の前後で増加しない。

5
Amro

交差検定の目的はモデルを修飾することであることはすでに述べました。言い換えると、交差検証は、使用されたデータに関係なく、選択された「パラメータ」で生成されたモデルのエラー/精度の推定を提供します。 corss検証プロセスは、パフォーマンスに満足するまで、異なるパラメーターを使用して繰り返すことができます。次に、データ全体に最適なパラメーターを使用してモデルをトレーニングできます。

2
anonymous

交差検証を使用する主なポイントは、さまざまなデータで使用した場合のトレーニング済みモデルのパフォーマンスをより適切に推定できることです。

どの木を選びますか? 1つのオプションは、トレーニングセットのすべてのデータを使用して新しいツリーを作成することです。

2
Rockcoder

相互検証は、意思決定ツリーの作成/プルーニングには使用されません。新しいデータの到着をシミュレートすることによって(すべてのデータに基づいて構築された)ツリーのパフォーマンスを推定するために使用されます(作成したようにいくつかの要素なしでツリーを構築することにより)。生成されたツリーの1つを選択することは、実際には意味がありません。これは、モデルが既存のデータによって制約されているためです(新しいデータにツリーを使用する場合、モデルをすべて使用しないと、実際に悪化する可能性があります)。
ツリーは、選択したデータ(通常はすべて)の上に構築されます。通常、剪定は何らかのヒューリスティックを使用して行われます(つまり、ノードの要素の90%がクラスAに属しているため、これ以上進めないか、情報のゲインが小さすぎます)。

1
pablochan

私は現在同じ問題に直面していますが、概念が矛盾しており、モデルの堅牢性とモデルの解釈のトレードオフであるため、「正しい」答えはないと思います。私は基本的に、簡単な解釈、視覚化、および直接的な実践的なアプリケーションのために、決定木アルゴリズムを選択しました。一方、交差検証を使用してモデルの堅牢性を証明したいと思います。私は2ステップのアプローチを適用すると思います。1. k分割交差検証を適用して、このデータセットでアルゴリズムのロバスト性を示します。2.解釈可能な結果を​​得るために、データセット全体を最終決定ツリーに使用します。

交差検定のツリーセットまたは最高のパフォーマンスのツリーをランダムに選択することもできますが、ホールドアウトセットの情報が失われます。

0
Marco Caviezel