DBSCAN

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 11. joulukuuta 2021 tarkistetusta versiosta . vahvistus vaatii 1 muokkauksen .

Tiheyspohjainen kohinasovellusten spatiaalinen klusterointi ( DBSCAN  ) on Maritin Esterin , Hans-Peter Kriegelin, Jörg Sanderin ja Xiaowei Sun vuonna 1996 ehdottama dataklusterointialgoritmi [1] . Tämä on tiheyteen perustuva klusterointialgoritmi - kun annetaan joukon pisteitä jossain tilassa, algoritmi ryhmittelee pisteet, jotka ovat lähellä toisiaan (pisteet, joissa on monia lähinaapureita ) ja merkitsee poikkeaviksi pisteet, jotka ovat yksinäisiä pienitiheyksisille alueilla. (lähin jonka naapurit ovat kaukana). DBSCAN on yksi yleisimmin käytetyistä klusterointialgoritmeista ja se on useimmin mainittu tieteellisessä kirjallisuudessa [2] .

Algoritmi sai vuonna 2014 "time-tested" -palkinnon (palkinto, joka myönnetään teoriassa ja käytännössä merkittävää huomiota saaneille algoritmeille) johtavassa tiedonlouhintakonferenssissa KDD [3] .

Varhaiset versiot

Vuonna 1972 Robert F. Ling oli jo julkaissut artikkelin The  Theory and Construction of k-Clusters [4] The Computer Journalissa , jossa oli samanlainen algoritmi laskennallisen monimutkaisuuden arvioinnilla [4] . DBSCAN on pahimman tapauksen monimutkaisuus ja sanamuoto DBSCAN tietokantasuuntautuneilla aluekyselyillä[ Clear ] mahdollistaa nopeuttamisen indeksillä. Algoritmit eroavat toisistaan ​​reunapisteiden käsittelyssä.

Valmistelu

Harkitse pistejoukkoa jossain tilassa, joka vaatii klusterointia. DBSCAN-klusteroinnin suorittamiseksi pisteet jaetaan ydinpisteisiin, jotka ovat saavutettavissa pistetiheydellä , ja poikkeaviin arvoihin seuraavasti:

Nyt, jos p on ydinpiste, se muodostaa klusterin kaikkien siitä pisteestä saavutettavien pisteiden (ydin tai ei-ydin) kanssa. Jokainen klusteri sisältää vähintään yhden pääkohdan. Ei-olennaiset pisteet voivat olla osa klusteria, mutta ne muodostavat sen "reunan", koska niitä ei voida käyttää muiden pisteiden saavuttamiseen.

Saavutettavuus ei ole symmetrinen suhde, koska määritelmän mukaan ei-ydinpisteestä ei päästä mihinkään pisteeseen etäisyydestä riippumatta (siis ei-ydinpisteeseen voi päästä, mutta siitä ei päästä mihinkään). Siksi liitettävyyden lisäkäsite on välttämätön DBSCAN-algoritmin löytämän klusterialueen muodollisessa määrittelyssä. Kaksi pistettä p ja q liittyvät tiheyteen , jos on sellainen piste o , että sekä p että q ovat saavutettavissa pisteestä o . Tiheysyhteys on symmetrinen.

Sitten klusteri täyttää kaksi ominaisuutta:

  1. Kaikki klusterin pisteet ovat pareittain toisiinsa tiheydeltään.
  2. Jos pisteen tiheys on saavutettavissa jostain pisteestä klusterissa, se kuuluu myös klusteriin.

Algoritmi

Alkuperäinen kyselypohjainen algoritmi

DBSCAN vaatii kahden parametrin määrittämisen: ja pisteiden vähimmäismäärän, joiden tulee muodostaa tiheä alue [5] (minPts). Algoritmi alkaa mielivaltaisesta pisteestä, jota ei ole vielä katsottu. Pisteelle valitaan -naapuri ja jos siinä on tarpeeksi pisteitä, muodostetaan klusteri, muuten piste merkitään kohinaksi. Huomaa, että tämä piste voidaan myöhemmin löytää toisen pisteen -naapurustosta ja sisällyttää johonkin klusteriin.

Jos piste löytyy klusterin tiheäksi pisteeksi, myös sen -naapuri on osa tätä klusteria. Siksi kaikki tämän pisteen -naapurustosta löydetyt pisteet lisätään klusteriin. Tämä prosessi jatkuu, kunnes tiheyteen yhdistetty klusteri löytyy. Sitten valitaan ja käsitellään uusi vierailematon piste, mikä johtaa seuraavan klusterin tai kohinan löytämiseen.

DBSCAN:ia voidaan käyttää minkä tahansa etäisyysfunktion [1] [6] (sekä samankaltaisuusfunktion tai loogisen ehdon) kanssa [7] . Etäisyysfunktiota (dist) voidaan siksi pitää lisäparametrina.

Algoritmi voidaan kirjoittaa pseudokoodilla seuraavasti [6] :

DBSCAN(DB, distFunc, eps, minPts) { C=0 /* Cluster count */ jokaiselle pisteelle P tietokannassa DB { if label(P) ≠ määrittelemätön sitten jatka /* Piste etsittiin sisäsilmukasta */ Naapurit N=RangeQuery(DB, distFunc, P, eps) / * Etsi naapureita */ if |N|< minPts then { /* Tiheystarkistus */ label(P)=Noise /* Merkitse kohinaksi */ jatka } C=C + 1 /* seuraava klusterin otsikko */ etiketti(P)=C /* Tunnisteen aloituspiste */ Siemenjoukko S=N \ {P} /* Laajennettavat naapurit */ jokaiselle pisteelle Q S { /* Käsittele jokainen siemenpiste */ jos etiketti(Q)=kohina , sitten etiketti(Q)=C /* Muuta otsikko Kohina reunaksi */ jos etiketti(Q) ≠ määrittelemätön niin jatka /* On katsottu */ etiketti(Q)= C /* Merkitse naapuri */ Naapurit N=RangeQuery(DB, distFunc, Q, eps) /* Etsi naapureita */ jos |N|≥ minPts sitten { /* Tarkista tiheys */ S=S ∪ N /* Lisää naapureita aseta alkeellisia kohtia */ } } } }

jossa RangeQuery voidaan toteuttaa käyttämällä tietokantaindeksiä suorituskyvyn parantamiseksi tai lineaarista hidasta hakua voidaan käyttää:

RangeQuery(DB, distFunc, Q, ) { Naapurit = tyhjä lista jokaiselle pisteelle P tietokannassa DB { /* Tarkista kaikki tietokannan pisteet */ if then { /* Laske etäisyys ja tarkista epsilon */ Naapurit=Naapurit ∪ {P} /* Lisää tulokseen */ } } palauta naapurit }

Abstrakti algoritmi

DBSCAN-algoritmi voidaan jakaa seuraaviin vaiheisiin [6] :

  1. Etsimme pisteet jokaisen pisteen läheisyydestä ja valitsemme pääpisteet, joissa on enemmän kuin minPts naapureita.
  2. Löydämme pääpisteiden yhdistetyt komponentit naapurikaaviosta jättäen huomioimatta kaikki ei-peruspisteet.
  3. Määritä jokainen ei-ensisijainen lähin klusteri, jos klusteri on -naapuri, muussa tapauksessa pidä pistettä kohinana.

Algoritmin naiivi toteutus vaatii naapurien muistamista vaiheessa 1, joten se vaatii huomattavaa muistia. Alkuperäinen DBSCAN-algoritmi ei vaadi tätä tekemällä nämä vaiheet piste kerrallaan.

Vaikeus

DBSCAN vierailee jokaisessa tietokantapisteessä, ehkä useita kertoja (esimerkiksi ehdokkaina muihin klustereihin). Käyttökokemuksen perusteella aika monimutkaisuus määräytyy kuitenkin pääasiassa regionQuery-kyselyiden määrän perusteella. DBSCAN suorittaa täsmälleen yhden tällaisen kyselyn jokaiselle pisteelle, ja jos käytetään indeksirakennetta, joka suorittaa -naapurustokyselyn O(log n ) -ajassa, kokonaiskeskimääräinen aikamonimutkaisuus on O( n log n ) (jos parametri on valittu järkevästi, niin se on sellainen, että vain O(log n ) pistettä palautetaan keskimäärin). Ilman kiihtyvän indeksirakenteen käyttöä tai degeneroituneessa datassa (esimerkiksi kun kaikki pisteet ovat pienempiä kuin ), pahimman tapauksen ajoaika säilyy . Koon etäisyysmatriisi voidaan laskea etäisyyksien uudelleenlaskemisen välttämiseksi, mutta tämä vaatii muistia , kun taas DBSCAN-toteutus ilman etäisyysmatriisia vaatii vain O( n ) muistia.

Edut

  1. DBSCAN ei edellytä datassa olevien klusterien määrän määrittämistä etukäteen , toisin kuin k-means- menetelmässä .
  2. DBSCAN voi löytää mielivaltaisen muotoisia klustereita. Se voi jopa löytää klustereita, jotka ovat täysin muiden klustereiden ympäröimiä (mutta ei niihin kytkettyjä). MinPts-parametrin ansiosta yhden yhteyden ns. vaikutus (erilaisten klustereiden yhdistäminen ohuella pisteviivalla) vähenee.
  3. DBSCANilla on käsitys kohinasta ja se sietää poikkeavuuksia .
  4. DBSCAN vaatii vain kaksi parametria ja on enimmäkseen epäherkkä tietokannan pisteiden järjestykselle . (Kahden eri klusterin rajalla olevat pisteet voivat kuitenkin päätyä toiseen klusteriin, jos pisteiden järjestystä muutetaan, ja klusterien osoitus on yksilöllinen isomorfismiin asti.)
  5. DBSCAN on suunniteltu käytettäväksi tietokantojen kanssa, jotka voivat nopeuttaa kyselyitä useilla arvoilla, kuten R*-puulla .
  6. MinPt:t ja parametrit voivat asettaa alan asiantuntijat, jos tiedot ymmärretään hyvin.

Haitat

  1. DBSCAN ei ole täysin yksiselitteinen - reunapisteet, jotka voidaan saavuttaa useammasta kuin yhdestä klusterista, voivat kuulua mihin tahansa näistä klustereista riippuen siitä, missä järjestyksessä pisteitä tarkastellaan. Useimmissa tietojoukoissa näitä tilanteita esiintyy harvoin ja niillä on vain vähän vaikutusta klusteroinnin tulokseen [6]  - DBSCAN käsittelee pääkohdat ja kohinan yksilöllisesti. DBSCAN* [8] on variantti, joka käsittelee reunapisteitä kohinana ja saavuttaa siten täysin yksiselitteisen tuloksen sekä yhtenäisemmän tilastollisen tulkinnan tiheysliittyneistä komponenteista.
  2. DBSCANin laatu riippuu regionQuery(P,ε)-funktiossa käytetystä etäisyysmittauksesta . Yleisimmin käytetty etäisyysmittari on euklidinen metriikka . Tämä mittari voi olla lähes hyödytön erityisesti korkeaulotteisen datan klusteroinnissa ns. "ulottuvuuden kirouksen" vuoksi, mikä vaikeuttaa sopivan arvon löytämistä . Tämä vaikutus on kuitenkin läsnä kaikissa muissa euklidiseen etäisyyteen perustuvissa algoritmeissa.
  3. DBSCAN ei voi hyvin klusteroida tietojoukkoja, joissa on suuria tiheyseroja, koska se ei voi valita yhdistelmää, joka on hyväksyttävä kaikille klustereille [9] .
  4. Jos tietoja ja mittakaavaa ei ymmärretä hyvin, merkityksellisen etäisyyskynnyksen valitseminen voi olla vaikeaa.

Katso alla olevasta osiosta laajennuksista näitä ongelmia käsitteleviä algoritmisia muutoksia.

Parametriarvio

Kaikissa tiedonlouhintatehtävissä on parametriongelma. Jokaisella parametrilla on erityinen vaikutus algoritmiin. DBSCAN-algoritmi tarvitsee parametrit ja minPts . Käyttäjän on määritettävä parametrit. Ihannetapauksessa arvon määrittää ratkaistava ongelma (esim. fyysiset etäisyydet), ja minPts määrittää sitten halutun pienimmän klusterin koon [5] .

OPTICS voidaan ajatella DBSCANin yleistyksenä, jossa parametri korvataan maksimiarvolla, jolla on eniten vaikutusta suorituskykyyn. MinPtsistä tulee sitten klusterin vähimmäiskoko. Vaikka algoritmi on oleellisesti yksinkertaisempi parametrien valintaalueella kuin DBSCAN, sen tuloksia on vaikeampi käyttää, koska se yleensä tuottaa hierarkkista klusterointia DBSCANin tuottaman yksinkertaisen osioinnin sijaan.

Äskettäin yksi DBSCANin kirjoittajista muutti DBSCANia ja OPTICSia ja julkaisi tarkistetun version hierarkkisesta DBSCANista (HDBSCAN*) [8] , jossa ei enää ole reunapisteiden käsitettä. Vain pääkohdat muodostavat klusterin.

Laajennukset

Yleistetty DBSCAN (GDBSCAN) [7] [10] on samojen tekijöiden yleistys mielivaltaisille loogisille lausekkeille "naapuruus" ja "tiheys". Parametrit ja minPts poistetaan algoritmista ja siirretään loogisiin ehtoihin. Esimerkiksi monikulmioiden tiedoissa "naapuruus" voi olla mikä tahansa monikulmioiden leikkauspiste, kun taas tiheysehto käyttää aluetta piirteiden määrän sijaan.

DBSCAN-algoritmille on ehdotettu erilaisia ​​laajennuksia, mukaan lukien menetelmät rinnakkaisuun, parametrien estimointi ja kyseenalaisten tietojen tuki. Perusidea on laajennettu hierarkkiseen klusterointiin OPTICS -algoritmin avulla . DBSCAN-algoritmia on käytetty myös osana aliavaruusklusterointialgoritmeja, kuten PreDeCon ja SUBCLU . HDBSCAN [8] on hierarkkinen versio DBSCANista, joka on myös nopeampi kuin OPTICS ja jossa hierarkiasta voidaan poimia litteä osio, joka koostuu näkyvimmistä klustereista [11] .

Saatavuus

Algoritmin eri toteutuksia löydettiin valtavalla suorituskyvyllä, nopein suoritti testidatan työskentelyn 1,4 sekunnissa ja hitain 13 803 sekunnissa [12] . Ero johtuu toteutuksen laadusta, eroista kielissä ja kääntäjissä sekä indeksien käytöstä asioiden nopeuttamiseksi.

Muistiinpanot

  1. 1 2 3 Ester, Kriegel, Sander, Xu, 1996 , s. 226–231.
  2. Microsoft Academic Search, 2010 .
  3. Test of Time -palkinto, 2014 .
  4. 12 Ling , 1972 , s. 326-332.
  5. 1 2 Vaikka minPts on intuitiivisesti pienin klusterin koko, joissain tapauksissa DBSCAN voi tuottaa pienempiä klustereita ( Schubert, Sander, Ester, Kriegel, Xu 2017 ). DBSCAN-klusteri koostuu vähintään yhdestä ydinpisteestä . Koska muut pisteet voivat olla useamman kuin yhden klusterin reunapisteitä, ei ole takeita siitä, että jokaiseen klusteriin sisältyy vähintään minPts pisteitä.
  6. 1 2 3 4 5 6 7 8 9 Schubert, Sander, Ester, Kriegel, Xu, 2017 , s. 19:1–19:21.
  7. 1 2 3 4 Sander, Ester, Kriegel, Xu, 1998 , s. 169-194.
  8. 1 2 3 Campello, Moulavi, Zimek, Sander, 2015 , s. 1–51.
  9. Kriegel, Kröger, Sander, Zimek, 2011 , s. 231-240.
  10. Sander, 1998 .
  11. Campello, Moulavi, Zimek, Sander, 2013 , s. 344.
  12. Kriegel, Schubert, Zimek, 2016 , s. 341.

Kirjallisuus