Tietojen valmisteleminen koneoppimista varten
Ennen kuin voit luoda koneoppimismallin, sinun on valmisteltava tiedot, joita käytät niiden kouluttamiseen ja arvioimiseen. Tiedot käsitellään Azure Databricksissä sen lähteestä, usein datatiedostoina. Vaihtoehtoisesti voit luoda datatiedostoihin perustuvia delta-taulukoita tietojen tarkastelemisen ja analysoinnin yksinkertaistamiseksi. Kun tietoja on käytetty, datatieteilijä valmistelee ne koneoppimista varten.
Yleensä tietojen valmistelu edellyttää kahta tärkeää tehtävää:
- Tietojen puhdistaminen: Tietojen ongelmien tunnistaminen ja lieventäminen, jotka vaikuttavat sen hyödyllisyyteen koneoppimisessa.
- Ominaisuuksien suunnittelu ja esikäsittely: Mallin harjoittamiseen sopivien ominaisuuksien valitseminen ja muuntaminen.
Tietojen puhdistaminen
Tietojen siistimiseen tarvittavat erityisvaiheet vaihtelevat projektikohtaisten tietojen mukaan, mutta tyypillisiä ongelmia, joihin on puututtava:
-
Epätäydelliset tiedot: Tiedot sisältävät usein tietueita, joista puuttuu yksittäisiä kenttiä (mikä näkyy usein tyhjäarvojen olemassaolona). Sinun on tunnistettava puuttuvat arvot ja lievennettävä niitä seuraavasti:
- Korvaamalla ne sopivalla korvaamalla - joko interpoloimalla sarjan arvo, käyttämällä keskiarvoa (tai mediaaniarvoa) tai luomalla jokin muu sopiva arvo.
- Epätäydellisten rivien poistaminen kokonaan (olettaen, että tämä jättää riittävästi sopivia tietoja mallinnusta varten)
- Virheet: Ei ole harvinaista, että tiedot sisältävät virheitä, jotka johtuvat tietojen syöttämisvirheistä tai epäonnistuneesta tietojen käsittelystä yläpuolisesti. Virheiden löytäminen voi olla hankalaa, ja siihen liittyy yleensä tietojen huomattava tarkastelu kyselyiden ja visualisointien avulla, jotta tiedoista voidaan tehdä yhteenveto ja etsiä arvoja, jotka eivät ole yhdenmukaisia useimpien kentän muiden arvojen kanssa.
- Poikkeavat arvot: Poikkeavat arvot ovat arvoja, jotka ovat merkittävästi tietojen tilastollisen jakauman ulkopuolella (ylä- tai alapuolella). Joskus poikkeavat arvot ovat merkki virheestä (esimerkiksi jollakulla voi olla arvo, jossa on ylimääräinen nolla tai joka jätetään pois desimaalipilkusta), ja joskus ne ovat todellisia arvoja, jotka ovat epätavallisen suuria tai pieniä verrattuna useimpiin havaintoihin. Kummassakin tapauksessa äärimmäiset poikkeavat arvot voivat vaikuttaa kielteisesti koneoppimismallin harjoittamiseen. Siksi ne kannattaa tavallisesti käsitellä nollaamalla ne ylemmäksi tai pienemmäksi kynnysarvoksi tai poistamalla tietojoukosta tietueet, jotka sisältävät poikkeavia arvoja.
- Virheelliset tietotyypit: Koneoppimisen algoritmit voivat ottaa huomioon ominaisuusarvoille määritetyt tietotyypit. On tavallista, että tietojoukot, jotka perustuivat virhe- tai tyhjäarvoja sisältäviin tekstitiedostoihin, voivat julkaista numeerisia kenttiä virheellisesti merkkijonotietotyypiksi . Usein erillisiä kokonaislukuarvoja edustavat arvot voidaan esittää virheellisillä luvuilla (tai päinvastoin). Tutki tietojesi rakennetta ja määritä oikeat tietotyypit, jotka tehokkaimmin heijastavat tietoarvoja.
- Epätasapainoiset tiedot: Koneoppimisen harjoittaminen toimii parhaiten, jos harjoitustiedot vastaavat riittävästi kaikkia mahdollisesti vastaanotettuja eri ominaisuus- ja otsikkoyhdistelmiä. Epätasapainoisessa tietojoukossa tietueet, jotka sisältävät tietyn luokittaisen arvon tai kenttien yhdistelmän, ovat yliedustettuja; jotka voivat vaikuttaa koulutusalgoritmiin ja lisätä malliin puolueellisuutta. Yleinen tapa ratkaista tämä ongelma on ylikuormittaa aliedustetut arvot sisällytetyillä rivien kaksoiskappaleilla tai alimerkitä yliedustetut rivit (poistamalla ne tietojoukosta).
Azure Databricksissä yleisin tapa havaita ja käsitellä tällaisia ongelmia on kirjoittaa koodi muistikirjaan, joka tutkii ja käsittelee tietoja. Ensisijainen luokka, jota käytetään tällaiseen tietojen käsittelyyn, on Spark-tietokehys.
Esimerkiksi seuraava koodi lataa tiedot tekstitiedostosta tietokehykseen:
df = spark.read.format("csv").option("header", "true").load("/myfolder/mydata.csv")
Vaihtoehtoisesti jos tiedot on ladattu Delta-taulukkoon Azure Databricks -työtilassa, voit SQL-kyselyn avulla ladata sen tiedot tietokehykseen:
df = spark.sql("SELECT * FROM mytable")
Kun tiedot on ladattu tietokehykseen, voit käyttää sen menetelmiä ja muita Spark SQL -kirjaston funktioita tietojen tutkimiseen ja muuntamiseen. Esimerkiksi seuraava koodi käyttää dropna-menetelmää kaikkien tyhjäarvoja sisältäneiden rivien poistamiseen ja määrittää tietokehyksen sarakkeille tietyt tietotyypit.
clean_data = df.dropna().select(col("column1").astype("string"),
col("column2").astype("float"))
Vihje
Lisätietoja Spark-tietokehyksen toiminnosta on Spark Dataframe -dokumentaatiossa.
Ominaisuuksien suunnittelu ja esikäsittely
Kun olet varmistanut, että tietojoukko on valmis ja puhdas, voit aloittaa ominaisuuksien valmistelun koneoppimista varten. Ominaisuustekniikka on toistuva lähestymistapa, johon liittyy usein kokeiluja ja virheitä sen määrittämiseksi, millä ominaisuussarakkeilla on ennakoiva arvo ja miten ominaisuuksia kannattaa edustaa. Yleisiä ominaisuuksien suunnittelu- ja esikäsittelytehtäviä ovat muun muassa seuraavat:
Uusien ominaisuuksien johtaminen: Usein voit johtaa uusia, ennakoivampia ominaisuuksia nykyisistä. Oletetaan esimerkiksi, että tietojoukossa on päivämääräsarake ja epäilet, että koko päivämäärä ei ehkä ole tärkeä ennustava tekijä tunnisteen tunnistamisessa, mutta että viikonpäivä voi olla. Voit luoda uuden day_of_week -ominaisuuden, joka on johdettu päivämäärästä, ja testata teoriaasi.
Numeeristen ominaisuuksien erottaminen: Joissakin tapauksissa numeerinen arvo voi osoittautua ennakoivammaksi, kun se diskretisoidaan luokkiin, jotka edustavat tiettyjä arvoalueita. Voit esimerkiksi käyttää numeerisia arvoja hintaominaisuudessa ja määrittää ne alhaisiin, keskikokoisiin ja suuriin luokkiin asianmukaisten raja-arvojen perusteella.
Koodauksen luokittaiset ominaisuudet: Monet tietojoukot sisältävät luokittaista tietoa, jota edustavat merkkijonoarvot. Useimmat koneoppimisen algoritmit toimivat kuitenkin parhaiten numeeristen tietojen kanssa. Siksi on tavallista määrittää numeerisia koodeja edustamaan luokkia merkkijonojen sijaan. Esimerkiksi tuotetietojen tietojoukkoon voi sisältyä väriominaisuus, jonka arvo voi olla "Vihreä", "Punainen" tai "Sininen". Voit koodata nämä arvot käyttämällä yksinkertaisia kokonaislukukoodeja, kuten " Vihreä" -arvolla 0, "Punainen "-arvolla 1 ja "Sininen"- arvolla 2 . Vaihtoehtoisesti voit käyttää yhden kuuman koodausmenetelmän avulla, jossa luot uuden sarakkeen kullekin mahdolliselle luokalle ja määrität kullekin sarakkeelle arvon 1 tai 0 tarvittaessa kullekin riville. Käytä tätä esimerkiksi seuraavasti:
Alkuperäinen värisarake Vihreä Punainen Sininen Vihreä 1 0 0 Sininen 0 0 1 Punainen 0 1 0 Numeeristen arvojen skaalaus (normalisointi): Numeeriset tietoarvot ovat usein eri asteikoilla tai mittausyksiköissä toisistaan. Koneoppimisen algoritmit käsittelevät ne kaikki absoluuttisina numeerisena arvona, ja suuremmat arvot voivat usein hallita mallin harjoittamista. Tämän ongelman ratkaisemiseksi on yleistä skaalata kaikki numeeriset sarakkeet niin, että yksittäisen sarakkeen yksittäiset arvot säilyttävät saman suhteen toisiinsa, mutta kaikki numeeriset sarakkeet ovat samassa asteikossa. Oletetaan esimerkiksi, että tietojoukko sisältää mittareina ja kiloina mitatut pituus- ja painoarvot . Voit muuntaa molemmat ominaisuudet skaalatuksi arvoksi nollan ja yhden välillä seuraavasti:
pituus paino scaled_length scaled_weight 250.0 2.1 0.250 0.210 176.0 0.9 0.176 0.09
Monet koneoppimiskirjastot sisältävät luokkia, joiden avulla voit suorittaa yleisiä ominaisuuksien suunnittelutehtäviä. Esimerkiksi Spark MLlib -kirjasto sisältää StringIndexer-luokan , jonka avulla voit suorittaa yksinkertaisen kokonaislukupohjaisen koodauksen merkkijonoarvoille.
from pyspark.ml.feature import StringIndexer
encoder = StringIndexer(inputCol="catCol", outputCol="catColCode")
encoded_data = encoder.fit(data).transform(data)
Huomautus
Sinun kannattaa selittää StringIndexer-koodiesimerkki tarkemmin. Spark MLlib -luokat voivat sisältää arvioijia , jotka sopivat algoritmiin tiettyä muunnostoimintoa varten näytetietoihin. Tässä tapauksessa StringIndexer-funktio sovittaa koodausalgoritmin datakehyksencatCol-sarakkeen erillisiin merkkijonoarvoihin. Näin määritetään tarkat laskutoimitukset, joita tarvitaan uuden koodattuja arvoja sisältävän catColCode-sarakkeen luomiseen. Arvioijan tulos on muuntaja , joka kapseloi arvioijan määrittämän funktion ja voi soveltaa kyseistä funktiota tietoihin ja luoda uuden tietokehyksen. Tässä esimerkissä välitämme samat tiedot, joita käytetään koodausfunktion määrittämiseen tuloksena saatavalle muuntajan, jotta koodaus todella voidaan ottaa käyttöön .
Spark MLLibissä voit ketjuttaa arvioijat ja muuntimet yhteen jaksoon , joka suorittaa kaikki tietojen valmisteluun tarvitsemasi ominaisuuksien suunnittelu- ja esikäsittelyvaiheet. Putki voi päättyä koneoppimisalgoritmiin, joka toimii arvioijana määrittäessään toimintoja, joita tarvitaan otsikon ennustamiseen valmistelluista ominaisuuksista. Putken tuloste on koneoppimismalli, joka on itse asiassa muunnin, jota voidaan käyttää mallifunktion käyttöön tietokehyksen ominaisuuksille ja vastaavien otsikkoarvojen ennustamiseen.