Kuinka tehdä valvomatonta klusterointia Keran kanssa

Syvän oppimisen algoritmit ovat hyviä kartoittamalla tulo annettuihin merkittyihin tietojoukkoihin johtuen sen poikkeuksellisesta kyvystä ilmaista epälineaarisia esityksiä. Tällaisia ​​tehtäviä kutsutaan luokitukseksi, kun taas jonkun on nimettävä nämä tiedot. Riippumatta siitä, merkitäänkö kuvia XRaysta tai aiheita uutisraporteista, se riippuu ihmisen väliintulosta, ja siitä voi tulla melko kallista, kun tietokokonaisuudet kasvavat.

Klusterianalyysi tai klusterointi on yksi valvomaton koneoppimistekniikka, joka ei vaadi merkittyä tietoa. Se tekee tämän ryhmittelemällä tietoaineistot niiden yhtäläisyyksien perusteella.

Miksi sinun tulisi välittää klusteroinnista tai klusterianalyysistä? Annan näyttää sinulle ideoita.

Klusteroinnin sovellukset

  • Suositusjärjestelmä, oppimalla käyttäjien ostohistoriaa, klusterointimalli voi segmentoida käyttäjät samankaltaisuuksien mukaan, auttaen sinua löytämään samanhenkisiä käyttäjiä tai niihin liittyviä tuotteita.
  • Biologiassa sekvenssiryhmittelyalgoritmit yrittävät ryhmitellä biologisia sekvenssejä, jotka ovat jotenkin sukulaisia. Proteiinit ryhmiteltiin aminohappopitoisuutensa mukaan.
  • Kuva- tai videoklusterointianalyysi jakaa ne ryhmiin yhtäläisyyksien perusteella.
  • Lääketieteellisessä tietokannassa jokaisella potilaalla voi olla erillinen reaaliarvoinen mitta tiettyjä testejä varten (esim. Glukoosi, kolesteroli). Ensin voidaan ryhmitellä potilaiden ryhmittelyä meille ymmärtämään, kuinka säröily tulisi tehdä todellisarvoisilla ominaisuuksilla ominaisuuksien harvaisuuden vähentämiseksi ja luokittelua koskevien tehtävien, kuten syöpäpotilaiden eloonjäämisennusteiden, tarkkuuden parantamiseksi.
  • Yleiskäyttötapaus, joka tuottaa kompaktin tiivistelmän tiedoista luokittelua, kuvion löytämistä, hypoteesin luomista ja testaamista varten.

Joka tapauksessa klusterointi on arvokas voimavara, jonka voi hankkia kaikille tietotekijöille.

Mikä tekee hyvän klusteroinnin

Hyvä klusterointimenetelmä tuottaa korkealaatuisia klustereita, joilla tulisi olla:

  • Korkea luokan sisäinen samankaltaisuus: Joustava klusterien sisällä
  • Matala luokkien välinen samankaltaisuus: Erottuva klusterien välillä

Aseta perustaso K-välineillä

Perinteinen K-keinoalgoritmi on nopea ja soveltuu moniin ongelmiin. Niiden etäisyysmittarit ovat kuitenkin rajoitettu alkuperäiseen datatilaan, ja se on yleensä tehoton, kun esimerkiksi syöttöulottuvuus on suuri, esimerkiksi kuvat.

Harjoitetaan K-Means-malli klusteroida MNIST-käsin kirjoitetut numerot 10 klusteriin.

Arvioitu K-Means-klusterointitarkkuus on 53,2%, vertaamme sitä myöhemmin syvälle upotettuun klusterointimalliin.

Malli, jonka aiomme pian esitellä, on useita osia:

  • Autoenkooderi, esiopetettu oppimaan merkitsemättömien tietojoukkojen tiivistetyn alkuperäisen esityksen.
  • Kooderikerros, joka on pinottu kooderiin, kooderin ulostulon osoittamiseksi klusterille. Klusterointikerroksen painot alustetaan K-Means-klusterikeskuksilla nykyisen arvioinnin perusteella.
  • Harjoittele klusterointimallia tarkentamaan klusterointikerrosta ja kooderia yhdessä.

Etsitkö lähdekoodia? Ota se GitHubiin.

Esijuna-autoenkooderi

Autoenkooderi on datan pakkausalgoritmi, jossa on kaksi pääosaa, kooderi ja dekooderi. Kooderin tehtävänä on pakata tulotiedot alemman ulottuvuuden ominaisuuksiin. Esimerkiksi yhdellä 28x28 MNIST-kuvan näytteellä on yhteensä 784 pikseliä, rakentamasi koodaaja voi tiivistää sen taulukkoon, jossa on vain kymmenen liukulukunumeroa, joka tunnetaan myös kuvan ominaisuuksina. Dekooderiosa puolestaan ​​ottaa pakatut ominaisuudet tulona ja rekonstruoida kuvan mahdollisimman lähelle alkuperäistä kuvaa. Autoencoder on luonteeltaan valvomaton oppimisalgoritmi, koska harjoituksen aikana se ottaa vain itse kuvia eikä tarvitse tarroja.

Autoencoder

Rakentamamme autoenkooderi on yksi täysin kytketty symmetrinen malli, joka on symmetrinen kuvan pakkaamiselle ja puristamiselle täysin vastakkaisilla tavoilla.

Täysin kytketty autoenkooderi

Aiomme kouluttaa automaattikooderin 300 aikakautta ja tallentaa mallipainot myöhempää käyttöä varten.

Klusterointimalli

Kouluttamalla autoenkooderia, olemme saaneet sen kooderiosan pakkaamaan jokaisen kuvan kymmeneksi liukulukuarvoksi. Saatat ajatella, koska syöttöulottuvuus on pienennetty 10: een, K-Meansin pitäisi pystyä tekemään klusterointi täältä? Kyllä, aiomme käyttää K-Means -sovellusta klusterin keskipisteiden luomiseen, mikä on 10 klusterin keskipistettä 10-D-ominaisuusalueessa. Mutta aiomme myös rakentaa mukautetun klusterointikerroksen muuntamaan syöttöominaisuudet klusterin etiketin todennäköisyyteen.

Todennäköisyys lasketaan opiskelijan t-jakauman perusteella. T-jakauma, joka on sama kuin t-SNE-algoritmissa, mittaa sulautetun pisteen ja keskipisteen samankaltaisuutta. Ja kuten saatat arvata, klusterointikerros toimii samanlaisena kuin K-välineet klusteroimiseksi, ja kerroksen painot edustavat klusterin keskikohtia, jotka voidaan alustaa kouluttamalla K-välineitä.

Jos olet uusi rakentamaan mukautettua tasoa Kerasiin, otat käyttöön kolme pakollista menetelmää.

  • build (input_shape), jossa voit määrittää kerroksen painot, tässä tapauksessa 10 klusteria 10-D ominaisuustilassa, eli 10x10 paino muuttujia.
  • kutsu (x), missä kerroslogiikka elää, jolloin tapahtuu kuvaus ominaisuuksista klusterointitarrojen magiaan.
  • compute_output_shape (input_shape), määritä tässä muotomuunnoslogiikka tulo- ja lähtömuodoiksi.

Tässä on mukautettu klusterointikerroksen koodi,

Seuraavaksi pinomme klusterointikerroksen esikokoitetun enkooderin jälkeen klusterointimallin muodostamiseksi. Rypytyskerrosta varten alustamme sen painot, klusterin keskukset käyttävät k-välineitä, jotka on koulutettu kaikkien kuvien ominaisuusvektoreihin.

Klusterointimallirakenne

Rypytysmallin kouluttaminen

Apukohteen jakauma ja KL-divergenssitappio

Seuraava vaihe on parantaa klusteroinnin määritystä ja ominaisuuksien esitystä samanaikaisesti. Tätä tarkoitusta varten määrittelemme centroidipohjaisen tavoitteen todennäköisyysjakauman ja minimoimme sen KL-divergenssin mallin klusterointituloon nähden.

Haluamme, että kohdejakelulla olisi seuraavat ominaisuudet.

  • Vahvista ennusteita, ts. Parantaa klusterin puhtautta.
  • Korosta enemmän tietopisteitä, jotka on osoitettu erittäin luotettavasti.
  • Estä suuret klusterit vääristämästä piilotettua tilaa.

Kohdejakauma lasketaan nostamalla ensin q (koodatut piirrevektorit) toiseen tehoon ja normalisoimalla sitten taajuus klusteria kohden.

Klusterit on tarpeen hienosäätää iteratiivisesti oppimalla korkean luottamusmääräyksen ansiosta apukohdejakauman avulla. Tietyn määrän iteraation jälkeen kohdejakauma päivitetään, ja klusterointimalli koulutetaan minimoimaan KL-divergenssitappio kohdejakauman ja klusterointituloksen välillä. Koulutusstrategiaa voidaan pitää eräänlaisena itsekoulutuksena. Kuten itsekoulutuksessa, otamme ensimmäisen luokittelijan ja leimaamattoman tietojoukon, merkitsemme sen sitten luokan luokittelijalle, jotta voimme harjoittaa korkean luottamuksen ennusteita.

Tappiofunktio, KL-divergenssi tai Kullback-Leiblerin-divergenssi on mittaus käyttäytymiserosta kahden eri jakauman välillä. Haluamme minimoida sen niin, että kohdejakauma on mahdollisimman lähellä klusteroinnin lähtöjakaumaa.

Seuraavassa koodinpätkässä kohdejakelu päivittää joka 140 harjoituskertausta.

Klusterointitarkkuus kasvaa tasaisesti jokaisen päivityksen jälkeen.

Arviointitiedot

Mittarin mukaan se on saavuttanut 96,2%: n klusterointitarkkuuden, mikä on melko hyvää ottaen huomioon, että sisääntulot ovat merkitsemättömiä kuvia. Katsotaanpa tarkemmin miten sen johdettu tarkkuus on.

Tämä mittari ottaa klusterimäärityksen valvomattomasta algoritmista ja maa-totuusmäärityksestä ja löytää sitten parhaan vastaavuuden niiden välillä.

Paras kartoitus voidaan laskea tehokkaasti unkarilaisella algoritmilla, joka toteutetaan scikit oppikirjastossa lineaarisena osoituksena.

On yksiselitteisempi tarkastella sekaannusmatriisia.

Sekaannusmatriisi

Täällä voit nopeasti sovittaa klusterointitehtävän käsin, esimerkiksi klusteri 1 vastaa oikeaa etikettiä 7 tai käsin kirjoitettua numeroa “7” ja viisumiviisua.

Alla oleva sekoitusmatriisi kuvaava koodinpätkä.

Konvoluutioautonkooderin käyttäminen (kokeellinen)

Koska kyse on kuvatietoaineistoista, kannattaa kokeilla konvoluutioauto-kooderia vain yhden kokonaisuuden sijaan täysin kytketyillä kerroksilla.

Yksi mainitsemisen arvoinen asia, kuvan rekonstruoimiseksi voit joko valita dekonvoluutiokerrokset (Conv2DTranspose in Keras) tai lisätä näytteenottoa (UpSampling2D) kerroksia vähempien esineistöongelmien vuoksi. Konvoluutioautoenkooderien koetulos on saatavana GitHubilla.

Johtopäätös ja lisälukema

Olemme oppineet rakentamaan keras-mallin klusteroinnin analysoimiseksi leimaamattomilla tietojoukkoilla. Esikoulutetulla auto-kooderilla oli merkittävä rooli mittojen pienentämisessä ja parametrien alustuksessa, sitten räätälöity klusterikerros koulutettiin kohdejakaumaa vastaan ​​tarkkuuden parantamiseksi edelleen.

Lisätietoja

Autoenkooderien rakentaminen Kerasiin - virallinen Keras-blogi

Valvomaton syvä upottaminen klusterointianalyysiin - inspiroi minua kirjoittamaan tämän viestin.

Koko lähdekoodi on GitHubissa, lue kannettavan tietokoneen loppuun saakka, koska löydät toisen vaihtoehdon tapa vähentää klusterointia ja autoenkooderin menetystä samanaikaisesti, mikä osoittautui hyödylliseksi parantamaan konvoluutioklusterimallin klusterointitarkkuutta.

Alun perin julkaistu osoitteessa www.dlology.com.