logo

Dimenze Vapnik-Chervonenkis

Dimenze Vapnik-Chervonenkis (VC) je měřítkem schopnosti sady hypotéz přizpůsobit se různým sadám dat. Zavedli ji Vladimir Vapnik a Alexey Chervonenkis v 70. letech 20. století a stala se základním pojmem v teorii statistického učení. Dimenze VC je měřítkem složitosti modelu, což nám může pomoci pochopit, jak dobře se hodí pro různé sady dat.

Dimenze VC množiny hypotéz H je největší počet bodů, které může H rozbít. Množina hypotéz H rozbije množinu bodů S, pokud pro každé možné označení bodů v S existuje hypotéza v H, která správně klasifikuje body. Jinými slovy, sada hypotéz rozbije sadu bodů, pokud se vejde do jakéhokoli možného označení těchto bodů.



Hranice VC – Dimenze

Dimenze VC poskytuje horní i dolní hranici počtu tréninkových příkladů potřebných k dosažení dané úrovně přesnosti. Horní mez počtu trénovacích příkladů je logaritmická v dimenzi VC, zatímco dolní mez je lineární.

Aplikace VC – Dimenze

Dimenze VC má širokou škálu aplikací v strojové učení a statistiky. Používá se například k analýze složitosti neuronových sítí, podpůrných vektorových strojů a rozhodovacích stromů. Dimenze VC lze také použít k návrhu nových algoritmů učení, které jsou odolné vůči šumu a mohou dobře zobecnit na neviditelná data.

Dimenze VC lze rozšířit na složitější scénáře učení, jako je vícetřídní klasifikace a regrese. Koncept dimenze VC lze také aplikovat na jiné oblasti informatiky, jako je výpočetní geometrie a teorie grafů.



Implementace kódu pro VC – Dimenze

Dimenze VC je teoretický koncept, který nelze přímo vypočítat z dat. Dimenzi VC pro daný soubor hypotéz však můžeme odhadnout tak, že spočítáme počet bodů, které může soubor rozbít. V Pythonu můžeme pomocí tohoto přístupu implementovat funkci, která počítá VC dimenzi dané sady hypotéz.

pouzdro na přepínač java

Funkce bere jako svůj vstup sadu hypotéz a vypočítává dimenzi VC pomocí přístupu hrubé síly kontroly všech možných kombinací bodů a popisků. Využívá modul itertools ke generování všech možných kombinací bodů a popisků a poté kontroluje, zda sada hypotéz může každou kombinaci rozbít. Funkce vrátí odhadovanou dimenzi VC sady hypotéz.

Ukažme si použití této funkce na několika příkladech:



Příklad 1:

co je zásobník v Javě

Předpokládejme, že máme množinu hypotéz, která se skládá ze všech lineárních funkcí tvaru f(x) = ax + b, kde aab jsou reálná čísla. Tuto sadu hypotéz můžeme v Pythonu definovat takto:

Krajta




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))>

>

>

xor cpp

Výstup:

2>

V příkladu 1 implementuje funkce linear_function jednoduchou sadu hypotéz lineární funkce, která vrací 1, pokud je y-ová souřadnice vstupního bodu větší nebo rovna souřadnici x, a v opačném případě 0. Funkce vc_dimension se pak použije k odhadu dimenze VC této sady hypotéz, která je 2.

Příklad 2:

Předpokládejme, že máme množinu hypotéz, která se skládá ze všech kvadratických funkcí tvaru f(x) = ax2+ bx + c, kde a, b a c jsou reálná čísla. Můžeme to definovat hypotéza nastavit v Pythonu takto:

algoritmus pro rsa

Krajta




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))>

>

>

Výstup:

3>

V příkladu 2 funkce kvadratická_funkce implementuje složitější sadu hypotéz kvadratické funkce, která vrací 1, pokud je y-ová souřadnice vstupního bodu větší nebo rovna druhé mocnině x-ové souřadnice, a 0 v opačném případě. Funkce vc_dimension se pak použije k odhadu dimenze VC této sady hypotéz, která je 3.

arraylist v java sort

Závěr

Dimenze VC je základní koncept v teorii statistického učení, který měří složitost sady hypotéz. Poskytuje jak horní, tak dolní hranici počtu tréninkových příkladů potřebných k dosažení dané úrovně přesnosti. V Pythonu můžeme odhadnout rozměr VC dané sady hypotéz pomocí přístupu hrubou silou, který kontroluje všechny možné kombinace bodů a popisků. Dimenze VC má širokou škálu aplikací ve strojovém učení a statistice a lze ji rozšířit na složitější scénáře učení.