logo

Vapnik-Chervonenkis-ulottuvuus

Vapnik-Chervonenkis (VC) -ulottuvuus mittaa hypoteesijoukon kykyä sovittaa eri tietojoukkoja. Sen esittelivät Vladimir Vapnik ja Aleksei Chervonenkis 1970-luvulla, ja siitä on tullut tilastollisen oppimisteorian peruskäsite. VC-ulottuvuus mittaa mallin monimutkaisuutta, mikä voi auttaa meitä ymmärtämään, kuinka hyvin se sopii erilaisiin tietojoukkoihin.

Hypoteesijoukon H VC-ulottuvuus on suurin määrä pisteitä, jotka H voi rikkoa. Hypoteesijoukko H rikkoo joukon pisteitä S, jos jokaisella mahdollisella S:n pisteiden merkinnällä on H:ssä hypoteesi, että luokittelee pisteet oikein. Toisin sanoen hypoteesijoukko rikkoo joukon pisteitä, jos se sopii mihin tahansa mahdolliseen näiden pisteiden merkintään.



VC:n rajat – ulottuvuus

VC-ulottuvuus tarjoaa sekä ylä- että alarajat koulutusesimerkkien lukumäärälle, joka vaaditaan tietyn tarkkuustason saavuttamiseksi. Harjoitusesimerkkien lukumäärän yläraja on logaritminen VC-ulottuvuuden osalta, kun taas alaraja on lineaarinen.

VC:n sovellukset – Dimension

VC-ulottuvuudella on laaja valikoima sovelluksia koneoppiminen ja tilastot. Sitä käytetään esimerkiksi neuroverkkojen, tukivektorikoneiden ja päätöspuiden monimutkaisuuden analysointiin. VC-ulottuvuutta voidaan käyttää myös suunnittelemaan uusia oppimisalgoritmeja, jotka kestävät kohinaa ja voivat yleistää hyvin näkymättömään dataan.

VC-ulottuvuus voidaan laajentaa monimutkaisempiin oppimisskenaarioihin, kuten moniluokkaiseen luokitukseen ja regressioon. VC-ulottuvuuden käsitettä voidaan soveltaa myös muilla tietojenkäsittelytieteen aloilla, kuten laskennalliseen geometriaan ja graafiteoriaan.



VC:n koodin toteutus – Dimension

VC-ulottuvuus on teoreettinen käsite, jota ei voida suoraan laskea tiedoista. Voimme kuitenkin arvioida VC-ulottuvuuden tietylle hypoteesijoukolle laskemalla pisteiden lukumäärän, jotka joukko voi rikkoa. Pythonissa voimme toteuttaa funktion, joka laskee tietyn hypoteesijoukon VC-ulottuvuuden tällä lähestymistavalla.

Funktio ottaa syötteensä hypoteesijoukon ja laskee VC-ulottuvuuden käyttämällä raa'an voiman lähestymistapaa, jossa tarkistetaan kaikki mahdolliset pisteiden ja nimikkeiden yhdistelmät. Se käyttää itertools-moduulia luomaan kaikki mahdolliset pisteiden ja nimikkeiden yhdistelmät ja tarkistaa sitten, voiko hypoteesijoukko murtaa jokaisen yhdistelmän. Funktio palauttaa hypoteesijoukon arvioidun VC-ulottuvuuden.

Havainnollistetaan tämän toiminnon käyttöä muutamilla esimerkeillä:



Esimerkki 1:

Oletetaan, että meillä on hypoteesijoukko, joka koostuu kaikista lineaarisista funktioista muotoa f(x) = ax + b, joissa a ja b ovat reaalilukuja. Voimme määritellä tämän Pythonissa asetetun hypoteesin seuraavasti:

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

>

>

Lähtö:

2>

Esimerkissä 1 lineaarinen_funktio-funktio toteuttaa yksinkertaisen lineaarifunktion hypoteesijoukon, joka palauttaa arvon 1, jos syötepisteen y-koordinaatti on suurempi tai yhtä suuri kuin x-koordinaatti, ja 0 muussa tapauksessa. Vc_dimension -funktiota käytetään sitten arvioimaan tämän hypoteesijoukon VC-ulottuvuus, joka on 2.

Esimerkki 2:

Oletetaan, että meillä on hypoteesijoukko, joka koostuu kaikista neliöfunktioista muotoa f(x) = ax2+ bx + c, missä a, b ja c ovat reaalilukuja. Voimme määritellä tämän hypoteesi asetettu Pythonissa seuraavasti:

Python


c#-kytkin



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

>

>

Lähtö:

3>

Esimerkissä 2 quadratic_function -funktio toteuttaa monimutkaisemman neliöfunktion hypoteesijoukon, joka palauttaa arvon 1, jos syötepisteen y-koordinaatti on suurempi tai yhtä suuri kuin x-koordinaatin neliö, ja 0 muussa tapauksessa. Vc_dimension -funktiota käytetään sitten arvioimaan tämän hypoteesijoukon VC-ulottuvuus, joka on 3.

Johtopäätös

VC-ulottuvuus on tilastollisen oppimisteorian peruskäsite, joka mittaa hypoteesijoukon monimutkaisuutta. Se tarjoaa sekä ylä- että alarajat koulutusesimerkkien määrälle, joka vaaditaan tietyn tarkkuustason saavuttamiseksi. Pythonissa voimme arvioida tietyn hypoteesijoukon VC-ulottuvuuden käyttämällä raakaa voimaa, joka tarkistaa kaikki mahdolliset pisteiden ja nimikkeiden yhdistelmät. VC-ulottuvuudella on laaja valikoima sovelluksia koneoppimisessa ja tilastoissa, ja se voidaan laajentaa monimutkaisempiin oppimisskenaarioihin.