Koneoppiminen R: ssä aloittelijoille esimerkin avulla



Tämä blogi R-koneoppimisesta auttaa sinua oppimaan koneoppimisen peruskäsitteet ja toteuttamaan erilaisia ​​koneoppimisalgoritmeja R: n kanssa.

Koneoppiminen R: n kanssa

Koneoppiminen on nykyisyys ja tulevaisuus! Netflixin suositusmoottorista Googlen itse ajavaan autoon - kaikki on koneoppimista. Tämä koneoppimisen R-blogi auttaa sinua ymmärtämään koneoppimisen peruskäsitteet, joita seuraavat erilaiset koneoppimisalgoritmit, ja näiden koneoppimisalgoritmien toteuttamisen R: n kanssa.

Tämä blogi aiheesta 'Machine Learning with R' koostuu seuraavista osioista:





Koneoppiminen R: n kanssa Edureka

Koneoppimisen ymmärtäminen

Fish1- koneoppiminen R: n kanssa - Edureka



Mistä tiedät, että kaikki nämä ovat kaloja?



Lapsena olet ehkä törmännyt kalan kuvaan, ja päiväkodin opettajat tai vanhemmat olisivat kertoneet sinulle, että tämä on kala ja siihen liittyy joitain erityispiirteitä, kuten siinä on evät, kidukset, pari silmät, häntä ja niin edelleen. Nyt, kun aivosi kohtaavat kuvan näiden ominaisuuksien kanssa, se rekisteröi sen automaattisesti kalaksi, koska aivoissa on oppinut että se on kala.

Näin aivomme toimivat, mutta entä kone? Jos sama kuva syötetään koneeseen, miten kone tunnistaa sen kalaksi?

Täällä M achine Oppiminen tulee. Syötämme kalan kuvia tietokoneelle, jossa on tunniste 'kala', kunnes kone oppii kaikki siihen liittyvät ominaisuudet kanssa kalastaa.

Kun kone on oppinut kaikki kalaan liittyvät ominaisuudet, syötämme sille uusia tietoja sen määrittämiseksi, kuinka paljon se on oppinut.

Toisin sanoen, Raakatiedot / harjoittelutiedot annetaan koneelle niin, että se oppii kaikki siihen liittyvät ominaisuudet Harjoittelutiedot. Kun oppiminen on suoritettu, se annetaan Uudet tiedot / testitiedot määrittää, kuinka hyvin kone on oppinut.

Siirrytään eteenpäin tässä Machine Learning with R -blogissa ja ymmärretään koneoppimisen tyypit.

Koneoppimisen tyypit

  • Ohjattu oppiminen:

Valvottu oppimisalgoritmi oppii tunnetusta tietojoukosta (Training Data), jolla on etikettejä ennusteita varten.

c ++ yhdistä lajittelualgoritmi

Regressio ja luokittelu ovat esimerkkejä valvotusta oppimisesta.

#Luokittelu:

Luokittelu määrittää, mihin luokkaryhmään uusi havainto kuuluu, ts. Luokitusalgoritmi oppii kaikki harjoitustietojen ominaisuudet ja tarrat, ja kun sille annetaan uutta tietoa, sen on osoitettava uusille havainnoille tarrat oppimansa mukaan harjoitustiedoista.

Tässä esimerkissä, jos ensimmäiselle havainnolle annetaan merkki 'Mies', se luokitellaan oikeutetusti, mutta jos sille annetaan nimi 'Nainen', luokitus on väärä. Vastaavasti toisen havainnon kohdalla, jos annettu tunniste on 'Nainen', se luokitellaan oikein, muuten luokitus on väärä.

#Regressio:

Regressio on valvottu oppimisalgoritmi, joka auttaa määrittämään, kuinka yksi muuttuja vaikuttaa toiseen muuttujaan.

Tässä 'elävä_alue' on riippumaton muuttuja ja 'hinta' on riippuvainen muuttuja, ts. Määritämme, kuinka 'hinta' vaihtelee suhteessa 'asumisalueeseen'.

  • Valvomaton oppiminen:

Valvomaton oppimisalgoritmi tekee päätelmiä tiedoista, joissa ei ole tunnisteita.

Ryhmittely on esimerkki valvomattomasta oppimisesta. 'K-tarkoittaa', 'hierarkkinen', 'sumea C-välineet' ovat joitain esimerkkejä klusterointialgoritmeista.

Tässä esimerkissä havaintokokonaisuus on jaettu kahteen ryhmään. Klusterointi tapahtuu havaintojen samankaltaisuuden perusteella. Klusterien sisäinen samankaltaisuus ja klusterien välinen samankaltaisuus on suuri eli kaikkien linja-autojen samankaltaisuus on erittäin suuri, mutta linja-autojen ja autojen välillä on pieni.

  • Vahvistusoppiminen:

Vahvistusoppiminen on eräänlainen koneoppimisalgoritmi, jossa kone / agentti käytettäessä ympäristöön oppii ihanteellisen käyttäytymisen maksimoidakseen suorituskyvyn. Yksinkertainen palkkapalaute vaaditaan, jotta agentti oppisi käyttäytymisensä. Tätä kutsutaan nimellä vahvistussignaali .

Otetaan pacman esimerkiksi. Niin kauan kuin pacman syö ruokaa, se ansaitsee pisteitä, mutta törmätessään hirviöön se menettää elämänsä. Siten pacman oppii, että sen on syötävä enemmän ruokaa ja vältettävä hirviöitäsen suorituskyvyn parantamiseksi.

Koneoppimisen toteuttaminen R: llä:

Lineaarinen regressio:

Työskentelemme timanttitietojoukon kanssa toteuttaaksemme lineaarisen regressioalgoritmin:

Tietojoukon kuvaus:

Ennen minkä tahansa mallin rakentamista tietoihin meidän on tarkoitus jakaa tiedot 'junan' ja 'testin' sarjoiksi. Malli rakennetaan 'juna' -sarjaan ja sen tarkkuus tarkistetaan 'testi' -sarjassa.

Meidän on ladattava caTools-paketti, jotta tiedot voidaan jakaa kahteen sarjaan.

kirjasto (caTools)

”CaTools” -paketti tarjoaa toiminnon “sample.split ()”, joka auttaa tietojen jakamisessa.

sample.split (timanttien $ hinta, SplitRatio = 0,65) -> split_index

65%: lle hintasarakkeen havainnoista on annettu 'true' -tunnus ja lopuille 35%: lle 'false' -tunnus.

alajoukko (timantit, split_index == T) -> juna alajoukko (timantit, split_index == F) -> testi

Kaikki havainnot, joilla on ”true” -tunniste, on tallennettu juna ”esine ja ne havainnot, joilla on ”väärä” -tunniste, on osoitettu ”testi” -sarjaan.

Nyt kun jakaminen on tehty ja meillä on 'juna' ja 'testi' sarjamme, on aika rakentaa lineaarinen regressiomalli harjoitusjoukolle.

Käytämme 'lm ()' -toimintoa rakentaaksemme lineaarisen regressiomallin 'juna' -dataan. Olemme määrittämässä hinta timanttien suhteessa kaikkiin muihin tietojoukon muuttujiin. Rakennettu malli on tallennettu objektiin 'mod_regress'.

lm (hinta ~., data = juna) -> mod_regress

Nyt kun olemme rakentaneet mallin, meidän on tehtävä ennusteita 'testisarjasta'. 'Ennustaa' -funktiota käytetään ennusteiden saamiseen. Siinä on kaksi argumenttia: rakennettu malli ja testisarja. Ennustetut tulokset tallennetaan “result_regress” -objektiin.

ennustaa (mod_regress, test) -> result_regress

Sidotaan todelliset hinta-arvot 'testi' -joukosta ja ennustetut arvot yhdeksi tietojoukoksi käyttämällä 'cbind ()' -toimintoa. Uusi tietokehys on tallennettu ”Final_Data” -kansioon

cbind (Todellinen = testi $ hinta, Ennustettu = tulos_rekisteri) -> Lopullinen_tiedot 
as.data.frame (Final_Data) -> Lopullinen_data

Vilkaisu ”Final_Data” -kohtaan, joka sisältää todelliset arvot ja ennustetut arvot:

kuinka lajitella taulukko nousevassa järjestyksessä c ++

Etsitään virhe vähentämällä ennustetut arvot todellisista arvoista ja lisäämällä tämä virhe uutena sarakkeen 'Final_Data':

(Final_Data $ Todellinen- Final_Data $ Ennustettu) -> virhe
cbind (Final_Data, virhe) -> Final_Data

Katsaus ”Final_Data” -kohtaan, joka sisältää myös ennustevirheen:

Nyt mennään eteenpäin ja lasketaan Juuren keskimääräinen neliövirhe' joka antaa yhteenlasketun virheen kaikille ennusteille

rmse1<-sqrt(mean(Final_Data$error^2)) 
rmse1

Rakennetaan jatkossa toinen malli, jotta voimme verrata molempien mallien tarkkuutta ja selvittää, mikä on parempi.

Rakennamme uuden lineaarisen regressiomallin 'juna' -sarjaan, mutta tällä kertaa pudotamme x- ja y-sarakkeet riippumattomista muuttujista, ts. Timanttien 'hinta' määräytyy kaikkien sarakkeita paitsi 'x' ja 'y'.

Rakennettu malli on tallennettu kansioon “mod_regress2”:

lm (hinta ~.-y-z, data = juna) -> mod_regress2

Ennustetut tulokset tallennetaan kohtaan ”result_regress2”

ennustaa (mod_regress2, test) -> result_regress2

Todelliset ja ennustetut arvot yhdistetään ja tallennetaan ”Final_Data2”:

cbind (Todellinen = testi $ hinta, Ennustettu = tulos_regressi2) -> Lopullinen_tiedot2 
as.data.frame (Final_Data2) -> Lopullinen_Data2

Lisätään myös ennustevirhe Final_Data2: een

(Final_Data2 $ Todellinen- Final_Data2 $ Ennustettu) -> virhe2
cbind (Final_Data2, error2) -> Final_Data2

Katsaus “Final_Data2”:

Etsitään keskimääräinen neliövirhe saadaksesi yhteenlaskettu virhe:

rmse2<-sqrt(mean(Final_Data2$error^2))

Näemme, että ”rmse2” on marginaalisesti pienempi kuin “rmse1”, ja siksi toinen malli on hieman parempi kuin ensimmäinen malli.

Luokittelu:

Työskentelemme 'car_purchase' -tietojoukon kanssa rekursiivinen osiointi mikä on luokittelualgoritmi.

Jaetaan tiedot 'juna' - ja 'testi' -joukoiksi käyttämällä 'sample.split ()' -toimintoa 'caTools' -paketista.

kirjasto (caTools)

65% 'Ostettu' -sarakkeen havainnoista annetaan TOSI-tunnisteille ja loput FALSE-tunnisteille.

sample.split (auto_osto # Ostettu, SplitRatio = 0,65) -> split_values

Kaikki havainnot, joilla on TOSI-merkki, tallennetaan junatietoihin, ja ne havainnot, joilla on TOSI-merkki, osoitetaan testitiedoille.

alajoukko (auton_osto, jaetut arvot == T) -> juna-tiedot
osajoukko (auton_osto, jakoarvot == F) -> testitiedot

Aika rekursiivisen osioinnin algoritmin rakentamiseen:

Aloitamme lataamalla rpart-paketin:

kirjasto (rpart)

”Ostettu” -sarake on riippuvainen muuttuja ja kaikki muut sarakkeet ovat riippumattomia muuttujia, ts. Määritämme onko henkilö ostanut auton vai ei kaikkien muiden sarakkeiden suhteen. Malli on rakennettu “train_data” -tietoon ja tulos tallennetaan ”mod1” -kenttään.

rpart (Ostettu ~., data = juna_tiedot) -> mod1

Piirretään tulos:

juoni (mod1, marginaali = 0,1) teksti (mod1, kaunis = T, cex = 0,8)

Mennään nyt ja ennustetaan tulokset 'test_data'. Annamme rakennetulle rpart-mallille “mod1” ensimmäisenä argumenttina, testisarjaksi ”test_data” toisena argumenttina ja ennustetyypin ”luokkaan” kolmannelle argumentille. Tulos tallennetaan ‘result1’ -objektiin.

ennustaa (mod1, test_data, type = 'class') -> tulos1

Arvioidaan mallin tarkkuus käyttämällä 'confusionMatrix ()' -toimintoa caret-paketista.

kirjasto (caret) confusionMatrix (taulukko (test_data $ ostettu, tulos1))

Sekaannusmatriisista käy ilmi, että 90 havainnosta, joissa henkilö ei ostanut autoa, 79 havaintoa on perustellusti luokiteltu ”Ei” ja 11 on väärin luokiteltu ”KYLLÄ”. Vastaavasti 50 havainnosta, joista henkilö tosiasiallisesti osti auton, 47 on perustellusti luokiteltu ”KYLLÄ” ja 3 on väärin luokiteltu ”EI”.

Voimme löytää mallin tarkkuuden jakamalla oikeat ennusteet kokonaisennusteisiin eli (79 + 47) / (79 + 47 + 11 + 3).

K-tarkoittaa klustereita:

Työskentelemme 'iris' -tietojoukon kanssa k-tarkoittaa klusterointia:

Poistetaan Laji-sarake ja luodaan uusi tietojoukko, joka sisältää vain neljä ensimmäistä saraketta iris-tietojoukosta.

iiris [1: 4] -> iris_k

Otetaan klustereiden lukumäärä 3. 'Kmeans ()' -toiminto ottaa syötetiedot ja klustereiden määrän, joihin data on tarkoitus ryhmitellä. Syntaksi on: kmeans (data, k), jossa k on klusterikeskusten lukumäärä.

kmeans (iris_k, 3) -> k1

Klusterin analysointi:

str (k1)

Funktio str () antaa kmeanien rakenteen, joka sisältää erilaisia ​​parametreja, kuten withinss, betweenss jne., Analysoimalla, josta voit selvittää kmean suorituskyvyn.

Betweenss: Neliöiden summan eli intracluster-samankaltaisuuden välillä

withinss: Neliön summan sisällä eli Intercluster-samankaltaisuus

totwithinss: Kaikkien klustereiden kaikkien sidosten summa, ts. klusterin sisäinen samankaltaisuus

Hyvällä klusteroinnilla on pienempi arvo 'tot.withinss' ja suurempi 'betweenss' -arvo, joka riippuu aluksi valittujen klustereiden 'k' lukumäärästä.

Aika on kypsä tulla koneoppimisen asiantuntijaksi hyödyntämään sinulle tulevia uusia mahdollisuuksia. Tämä tuo meidät tämän loppuun Koneoppiminen R: n kanssa ”-Blogi. Toivon, että tämä blogi oli informatiivinen hedelmällinen.

Edurekalla on erityisesti kuratoitu joka auttaa sinua saamaan asiantuntemusta koneoppimisalgoritmeista, kuten K-Means Clustering, Decision Trees, Random Forest, Naive Bayes. Opit myös tilastojen, aikasarjojen, tekstinlouhinnan ja syvällisen oppimisen käsitteet. Uudet erät tälle kurssille alkavat pian !!