logo

Vapnik-Chervonenkis Dimension

Vapnik-Chervonenkis (VC) dimensionen er et mål for kapaciteten af ​​et hypotesesæt til at passe til forskellige datasæt. Det blev introduceret af Vladimir Vapnik og Alexey Chervonenkis i 1970'erne og er blevet et grundlæggende begreb i statistisk læringsteori. VC-dimensionen er et mål for kompleksiteten af ​​en model, som kan hjælpe os med at forstå, hvor godt den kan passe til forskellige datasæt.

VC-dimensionen af ​​et hypotesesæt H er det største antal punkter, der kan knuses af H. Et hypotesesæt H knuser et sæt punkter S, hvis der for hver mulig mærkning af punkterne i S eksisterer en hypotese i H, der klassificerer punkterne korrekt. Med andre ord knuser et hypotesesæt et sæt punkter, hvis det kan passe til enhver mulig mærkning af disse punkter.



Grænser for VC – Dimension

VC-dimensionen giver både øvre og nedre grænser for antallet af træningseksempler, der kræves for at opnå et givet niveau af nøjagtighed. Den øvre grænse for antallet af træningseksempler er logaritmisk i VC-dimensionen, mens den nedre grænse er lineær.

Anvendelser af VC – Dimension

VC-dimensionen har en bred vifte af anvendelser inden for maskinelæring og statistik. For eksempel bruges det til at analysere kompleksiteten af ​​neurale netværk, understøtte vektormaskiner og beslutningstræer. VC-dimensionen kan også bruges til at designe nye læringsalgoritmer, der er robuste over for støj og kan generalisere godt til usete data.

VC-dimensionen kan udvides til mere komplekse læringsscenarier, såsom multiklasseklassifikation og regression. Konceptet med VC-dimensionen kan også anvendes på andre områder af datalogi, såsom beregningsgeometri og grafteori.



Kodeimplementering for VC – Dimension

VC-dimensionen er et teoretisk begreb, der ikke direkte kan beregnes ud fra data. Vi kan dog estimere VC-dimensionen for et givet hypotesesæt ved at tælle antallet af punkter, der kan knuses af sættet. I Python kan vi implementere en funktion, der beregner VC-dimensionen af ​​et givet hypotesesæt ved hjælp af denne tilgang.

Funktionen tager et hypotesesæt som input og beregner VC-dimensionen ved hjælp af brute-force-tilgangen til at kontrollere alle mulige kombinationer af punkter og etiketter. Det bruger itertools-modulet til at generere alle mulige kombinationer af punkter og etiketter og kontrollerer derefter, om hypotesesættet kan knuse hver kombination. Funktionen returnerer den estimerede VC-dimension af hypotesesættet.

Lad os illustrere brugen af ​​denne funktion med nogle eksempler:



Eksempel 1:

Antag, at vi har et hypotesesæt, der består af alle lineære funktioner af formen f(x) = ax + b, hvor a og b er reelle tal. Vi kan definere dette hypotesesæt i Python som følger:

Python


sorter arraylisten i java



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

streng ind i array java

>

>

Produktion:

2>

I eksempel 1 implementerer funktionen lineær_funktion et simpelt lineært funktionshypotesesæt, der returnerer 1, hvis inputpunktets y-koordinat er større end eller lig med x-koordinaten, og 0 ellers. Funktionen vc_dimension bruges derefter til at estimere VC-dimensionen af ​​dette hypotesesæt, som er 2.

Eksempel 2:

Antag, at vi har et hypotesesæt, der består af alle kvadratiske funktioner af formen f(x) = ax2+ bx + c, hvor a, b og c er reelle tal. Vi kan definere dette hypotese indstillet i Python som følger:

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

>

>

sæt afgrænser java

Produktion:

3>

I eksempel 2 implementerer funktionen kvadratisk_funktion et mere komplekst kvadratisk funktionshypotesesæt, der returnerer 1, hvis inputpunktets y-koordinat er større end eller lig med kvadratet af x-koordinaten, og 0 ellers. Funktionen vc_dimension bruges derefter til at estimere VC-dimensionen af ​​dette hypotesesæt, som er 3.

Konklusion

VC-dimensionen er et grundlæggende begreb i statistisk læringsteori, der måler kompleksiteten af ​​et hypotesesæt. Det giver både øvre og nedre grænser for antallet af træningseksempler, der kræves for at opnå et givet niveau af nøjagtighed. I Python kan vi estimere VC-dimensionen af ​​et givet hypotesesæt ved hjælp af en brute-force-tilgang, der kontrollerer alle mulige kombinationer af punkter og etiketter. VC-dimensionen har en bred vifte af applikationer inden for maskinlæring og statistik og kan udvides til mere komplekse læringsscenarier.