Vapnik-Chervonenkis (VC) 次元は、仮説セットがさまざまなデータセットに適合する能力の尺度です。これは 1970 年代に Vladimir Vapnik と Alexey Chervonenkis によって導入され、統計学習理論の基本的な概念になりました。 VC ディメンションはモデルの複雑さの尺度であり、モデルがさまざまなデータセットにどの程度適合できるかを理解するのに役立ちます。
仮説セット H の VC 次元は、H によって粉砕できる点の最大数です。仮説セット H は、S 内の点のすべての可能なラベル付けに対して、H に次のような仮説が存在する場合に、点のセット S を粉砕します。ポイントを正しく分類します。言い換えれば、仮説セットは、それらの点の可能なラベル付けに適合できる場合、点のセットを粉砕します。
VCの境界 – 次元
VC ディメンションは、所定の精度レベルを達成するために必要なトレーニング サンプルの数の上限と下限の両方を提供します。トレーニング例の数の上限は VC 次元では対数的ですが、下限は線形です。
VC のアプリケーション – ディメンション
VC ディメンションは、さまざまな分野で幅広い用途に使用できます。 機械学習 そして統計。たとえば、ニューラル ネットワーク、サポート ベクター マシン、デシジョン ツリーの複雑さを分析するために使用されます。 VC 次元は、ノイズに強く、目に見えないデータまで一般化できる新しい学習アルゴリズムを設計するために使用することもできます。
VC の次元は、マルチクラス分類や回帰など、より複雑な学習シナリオに拡張できます。 VC 次元の概念は、計算幾何学やグラフ理論など、コンピューター サイエンスの他の分野にも適用できます。
VC のコード実装 – Dimension
VC 次元は理論上の概念であり、データから直接計算することはできません。ただし、特定の仮説セットの VC 次元は、そのセットによって粉砕される可能性のある点の数を数えることによって推定できます。 Python では、このアプローチを使用して、特定の仮説セットの VC 次元を計算する関数を実装できます。
この関数は仮説セットを入力として受け取り、ポイントとラベルの考えられるすべての組み合わせをチェックする総当りアプローチを使用して VC 次元を計算します。 itertools モジュールを使用して、点とラベルのすべての可能な組み合わせを生成し、仮説セットが各組み合わせを打ち破ることができるかどうかを確認します。この関数は、仮説セットの推定 VC 次元を返します。
全加算器真理値表
この関数の使用法をいくつかの例で説明しましょう。
例 1:
f(x) = ax + b (a と b は実数) の形式のすべての線形関数で構成される仮説セットがあるとします。この仮説セットは Python で次のように定義できます。
パイソン
import> itertools> > > def> vc_dimension(hypothesis_set):> > '''> > Estimates the VC dimension of a hypothesis set using the brute-force approach.> > '''> > n> => 4> > while> True> :> > points> => [(i, j)> for> i> in> range> (n)> for> j> in> range> (> 2> )]> > shattered_sets> => 0> > for> combination> in> itertools.combinations(points, n):> > is_shattered> => True> > for> labeling> in> itertools.product([> 0> ,> 1> ], repeat> => n):> > hypotheses> => [hypothesis_set(point)> for> point> in> combination]> > if> set> (hypotheses) !> => set> (labeling):> > is_shattered> => False> > break> > if> is_shattered:> > shattered_sets> +> => 1> > else> :> > break> > if> not> is_shattered:> > break> > n> +> => 1> > return> n> -> 1> if> shattered_sets> => => 2> *> *> n> else> n> -> 2> > > # Example 1: linear function hypothesis set> def> linear_function(point):> > x, y> => point> > return> int> (y>>> => x)> > > print> (vc_dimension(linear_function))> |
ランタイムエラー
>
>
出力:
2>
例 1 では、linear_function 関数は、入力点の y 座標が x 座標以上の場合は 1 を返し、それ以外の場合は 0 を返す単純な線形関数仮説セットを実装します。次に、vc_dimension 関数を使用して、この仮説セットの VC 次元 (2) を推定します。
例 2:
f(x) = ax の形式のすべての 2 次関数で構成される仮説セットがあるとします。2+ bx + c。a、b、c は実数です。これを定義できます 仮説 Python では次のように設定します。
パイソン
import> itertools> > > def> vc_dimension(hypothesis_set):> > '''> > Estimates the VC dimension of a hypothesis set using the brute-force approach.> > '''> > n> => 5> > while> True> :> > points> => [(i, j)> for> i> in> range> (n)> for> j> in> range> (> 2> )]> > shattered_sets> => 0> > for> combination> in> itertools.combinations(points, n):> > is_shattered> => True> > for> labeling> in> itertools.product([> 0> ,> 1> ], repeat> => n):> > hypotheses> => [hypothesis_set(point)> for> point> in> combination]> > if> set> (hypotheses) !> => set> (labeling):> > is_shattered> => False> > break> > if> is_shattered:> > shattered_sets> +> => 1> > else> :> > break> > if> not> is_shattered:> > break> > n> +> => 1> > return> n> -> 1> if> shattered_sets> => => 2> *> *> n> else> n> -> 2> > > # Example 2: quadratic function hypothesis set> def> quadratic_function(point):> > x, y> => point> > return> int> (y>>> => x> *> *> 2> )> > > print> (vc_dimension(quadratic_function))> |
>
挿入ソートJava
>
出力:
3>
例 2 では、quadratic_function 関数は、入力点の y 座標が x 座標の 2 乗以上の場合は 1 を返し、それ以外の場合は 0 を返す、より複雑な 2 次関数仮説セットを実装します。次に、vc_dimension 関数を使用して、この仮説セットの VC 次元 (3) を推定します。
結論
VC 次元は、仮説セットの複雑さを測定する統計学習理論の基本概念です。これは、特定のレベルの精度を達成するために必要なトレーニング サンプルの数の上限と下限の両方を提供します。 Python では、点とラベルの考えられるすべての組み合わせをチェックする総当りアプローチを使用して、特定の仮説セットの VC 次元を推定できます。 VC の次元には、機械学習と統計の幅広い用途があり、より複雑な学習シナリオに拡張できます。