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>>> > > 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>>> *> *> 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.