Lopullinen opas satunnaiseen metsäalgoritmiin Pythonilla ja Scikit-Learn PlatoBlockchain Data Intelligencellä. Pystysuuntainen haku. Ai.

Lopullinen opas satunnaiseen metsäalgoritmiin Pythonilla ja Scikit-Learnilla

esittely

Random Forest -algoritmi on yksi joustavimmista, tehokkaimmista ja laajimmin käytetyistä algoritmeista luokittelu ja regressio, rakennettu mm päätöspuiden kokonaisuus.

Jos et tunne näitä – ei hätää, käsittelemme kaikki nämä käsitteet.

Tässä perusteellisessa käytännön oppaassa rakennamme intuitio miten päätöspuut toimivat, kuinka yhdistäminen tehostaa yksittäisiä luokittajia ja regressoreita, mitä satunnaiset metsät ovat ja rakenna satunnainen metsäluokittaja ja regressori Pythonilla ja Scikit-Learnillä, päästä päähän -miniprojektin kautta ja vastaa tutkimuskysymykseen.

Oletetaan, että kuulut tällä hetkellä tutkimusryhmään, joka analysoi naisia ​​koskevia tietoja. Ryhmä on kerännyt 100 tietuetta ja haluaa pystyä järjestämään ne alkutietueet jakamalla naiset luokkiin: raskaana oleminen tai ei, ja asuminen maaseudulla tai kaupungissa. Tutkijat haluavat ymmärtää, kuinka monta naista kussakin kategoriassa olisi.

On olemassa laskennallinen rakenne, joka tekee juuri sen, se on puu rakenne. Käyttämällä puurakennetta voit edustaa kunkin luokan eri jakoja.

Päätöspuut

Kuinka asutat puun solmut? Tämä on paikka päätöksentekopuut tulla huomion kohteeksi.

Ensin voimme jakaa tietueet raskauden mukaan, sen jälkeen voimme jakaa ne asumalla kaupungeissa tai maaseudulla. Huomaa, että voisimme tehdä tämän eri järjestyksessä jakamalla ensin naisen asuinalueen ja sen jälkeen heidän raskaustilanteensa mukaan. Tästä voimme nähdä, että puulla on luontainen hierarkia. Tiedon järjestämisen lisäksi puu järjestää tietoa hierarkkisesti – tiedon ilmestymisjärjestys on tärkeä ja johtaa sen seurauksena erilaisiin puihin.

Alla on esimerkki kuvatusta puusta:

Puukuvassa on 7 ruutua, joista ylhäällä on yhteensä 100 naista, tämä ylin neliö on yhdistetty kahteen alla olevaan ruutuun, jotka jakavat naiset niiden lukumäärän perusteella, jotka ovat 78 ei-raskaana ja 22 raskaana, ja molemmista edellisistä ruuduista on neljä ruutua; kaksi jokaiseen yläpuolella olevaan neliöön yhdistettynä, jotka jakavat naiset heidän alueensa perusteella, raskaana olevista 45 asuu kaupunkialueella, 33 maaseudulla ja raskaana oleville, 14 asuu maaseudulla ja 8 kaupunkialueella. Pelkästään puuta katsomalla on helppo ymmärtää nämä jaot ja nähdä kuinka kukin "kerros" on johdettu aiemmista, ne kerrokset ovat puu tasot, tasot kuvaavat syvyys puusta:

Lopullinen opas satunnaiseen metsäalgoritmiin Pythonilla ja Scikit-Learn PlatoBlockchain Data Intelligencellä. Pystysuuntainen haku. Ai.

Huomaa yllä olevassa kuvassa, että ensimmäinen puutaso on taso 0 jossa on vain yksi neliö, jota seuraa taso 1 jossa on kaksi ruutua, ja taso 2 jossa on neljä ruutua. Tämä on syvyys 2 puu.

Tasolla 0 on neliö, josta puu on peräisin, ensimmäinen, nimeltään juurisolmu, tällä juurella on kaksi lapsisolmut tasolla 1, eli pääsolmut tason 2 neljään solmuun. Katso, että tähän mennessä mainitsemamme "neliöt" ovat todella ns. solmut; ja että jokainen edellinen solmu on vanhempi seuraaville solmuille, jotka ovat sen lapsia. Kunkin tason lapsisolmuja, joilla on sama vanhempi, kutsutaan sisarukset, kuten seuraavasta kuvasta näkyy:

Lopullinen opas satunnaiseen metsäalgoritmiin Pythonilla ja Scikit-Learn PlatoBlockchain Data Intelligencellä. Pystysuuntainen haku. Ai.

Edellisessä kuvassa näytämme myös tason 1 olevan sisäpuoliset solmut, kun ne ovat juuren ja viimeisten solmujen välissä, jotka ovat lehden solmut. Lehtisolmut ovat puun viimeinen osa, jos sanoisimme 100 alkuperäisestä naisesta, kuinka moni on raskaana ja asuu maaseudulla, voisimme tehdä tämän katsomalla lehtiä. Joten lehtien numero vastaisi ensimmäiseen tutkimuskysymykseen.

Jos naisista syntyisi uusia ennätyksiä ja puuta, jota aiemmin käytettiin heidän luokittelemiseen, käytettäisiin nyt sen päättämiseen, voisiko nainen olla mukana tutkimuksessa, toimisiko se edelleen? Puu käyttäisi samoja kriteerejä, ja nainen olisi oikeutettu osallistumaan raskaana olevaan ja maaseudulla asuvaan.

Lopullinen opas satunnaiseen metsäalgoritmiin Pythonilla ja Scikit-Learn PlatoBlockchain Data Intelligencellä. Pystysuuntainen haku. Ai.

Katsomalla yllä olevaa kuvaa voimme nähdä, että vastaukset jokaisen puusolmun kysymyksiin "onko hän osallistuja?", "onko hän raskaana?", "asuuko hän maaseudulla?" - ovat kyllä, kyllä ​​ja kyllä, joten näyttää siltä, ​​että puu voi ajatuksena johtaa päätökseen, tässä tapauksessa, että nainen voisi osallistua tutkimukseen.

Tämä on olemus päätöspuista, tehdään manuaalisesti. Koneoppimisen avulla voimme rakentaa mallin, joka rakentaa tämän puun automaattisesti meille siten, että lopullisten päätösten tarkkuus maksimoidaan.

Huomautus: Tietojenkäsittelytieteessä on useita puita, kuten binääripuut, yleispuut, AVL-puut, splay-puut, punaiset mustat puut, b-puut jne. Tässä keskitymme antamaan yleiskuvan siitä, mikä on päätöspuu. . Jos se riippuu vastauksesta a Joo or Nro kysymys jokaiselle solmulle ja siten jokaisella solmulla on korkeintaan kaksi lasta, kun lajitellaan niin, että "pienemmät" solmut ovat vasemmalla, tämä luokittelee päätöspuut binääripuut.

Tarkkaile edellisissä esimerkeissä, kuinka puu voisi joko luokitella uusia tietoja osallistujina tai ei-osallistujina, tai kysymykset voitaisiin myös muuttaa muotoon - "Kuinka monta on osallistujaa?", "Kuinka moni on raskaana?", "Kuinka moni asuu maaseudulla?" - jolloin voimme löytää määrä raskaana olevista osallistujista, jotka asuvat maaseudulla.

Kun tiedot on luokiteltu, tämä tarkoittaa, että puu suorittaa a luokittelu tehtävä, ja kun datamäärä löytyy, puu suorittaa a regressio tehtävä. Tämä tarkoittaa, että päätöspuuta voidaan käyttää molempiin tehtäviin – luokitteluun ja regressioon.

Nyt kun ymmärrämme, mikä päätöspuu on, miten sitä voidaan käyttää ja mitä nimikkeistöä käytetään kuvaamaan sitä, voimme ihmetellä sen rajoituksia.

Satunnaisten metsien ymmärtäminen

Mitä päätökselle tapahtuu, jos joku osallistuja elää kaupunki- ja maaseutualueiden jaosta? Lisääkö puu tämän tietueen maaseudulle vai kaupungille? Vaikuttaa vaikealta sovittaa näitä tietoja nykyiseen rakenteeseen, koska se on melko selkeä.

Entä jos tutkimukseen osallistuu nainen, joka asuu veneessä, katsotaanko se maaseudulle vai kaupungille? Samalla tavalla kuin edellisessä tapauksessa, se on haastava tietopiste luokitella ottaen huomioon puussa käytettävissä olevat vaihtoehdot.

Ajattelemalla hieman enemmän päätöspuuesimerkkiä voimme nähdä, että se voi luokitella uudet tiedot oikein, koska se noudattaa jo puussa jo olevaa kaavaa – mutta kun tietueet poikkeavat puun määrittäneestä alkuperäisestä tiedosta, puurakenne on liian jäykkä, joten tietueita ei voida luokitella.

Tämä tarkoittaa, että päätöspuu voi olla tiukka ja rajoitettu mahdollisuuksiltaan. Ihanteellinen päätöspuu olisi joustavampi ja pystyisi mukauttamaan vivahteikkaampaa näkymätöntä dataa.

Ratkaisu: Aivan kuten "kaksi silmäparia näkee paremmin kuin yksi", kaksi mallia antaa yleensä tarkemman vastauksen kuin yksi. Tiedon esitysmuotojen (puurakenteeseen koodatun) monimuotoisuuden huomioon ottaen useiden samankaltaisten puiden välisten hieman erilaisten rakenteiden jäykkyys ei ole enää niin rajoittava, koska yhden puun puutteet voidaan "korottaa" toisella. Monia yhdistämällä puut yhdessä saamme a metsä.

Mitä tulee vastaukseen alkuperäiseen kysymykseen, tiedämme jo, että se koodataan puiden lehtiin – mutta mikä muuttuu, kun meillä on monta puuta yhden sijaan?

Jos puut yhdistetään luokittelua varten, tuloksen määrittää suurin osa vastauksista, tätä kutsutaan enemmistöäänestyksellä; ja regression tapauksessa kunkin metsän puun antama luku on keskimäärin.

Ensemble-oppiminen ja malliyhtyeet

Tämä menetelmä tunnetaan nimellä yhtyeen oppiminen. Kun käytät kokonaisoppimista, voit sekoittaa mitä tahansa algoritmeja yhteen, kunhan voit varmistaa, että tulos voidaan jäsentää ja yhdistää muihin tulosteisiin (joko manuaalisesti tai olemassa olevia kirjastoja käyttämällä). Tyypillisesti yhdistät useita samantyyppisiä malleja, kuten useita päätöspuita, mutta et rajoitu vain liittymään saman mallin tyyppisiin ryhmiin.

Kokoonpano on käytännössä taattu tapa yleistää paremmin ongelmaan ja puristaa pientä tehostetta suorituskykyyn. Joissakin tapauksissa mallien yhdistäminen tuottaa a merkittävä ennustevoiman kasvu, ja joskus vain vähän. Tämä riippuu tietojoukosta, jota harjoitat ja arvioit, sekä itse malleista.

Päätöspuiden yhdistäminen tuottaa satoa merkittävä suorituskyky paranee yksittäisiin puihin verrattuna. Tämä lähestymistapa yleistyi tutkimus- ja soveltavassa koneoppimisyhteisöissä, ja se oli niin yleinen, että päätöspuukokonaisuutta kutsuttiin puhekielessä metsä, ja yleinen luotava metsätyyppi (päätöspuiden metsä satunnaisten ominaisuuksien osajoukolla) teki nimen suosituksi satunnaiset metsät.

Laajan käytön vuoksi Scikit-Learnin kaltaiset kirjastot ovat ottaneet käyttöön kääreitä RandomForestRegressors ja RandomForestClassifiers, jotka on rakennettu omien päätöspuutoteutuksiensa päälle, jotta tutkijat eivät pysty rakentamaan omia kokonaisuuksiaan.

Sukellaan satunnaisiin metsiin!

Kuinka satunnainen metsäalgoritmi toimii?

Seuraavat ovat perusvaiheet, jotka liittyvät satunnaisen metsäalgoritmin suorittamiseen:

  1. Valitse useita satunnaisia ​​tietueita, se voi olla mikä tahansa numero, kuten 4, 20, 76, 150 tai jopa 2.000 XNUMX tietojoukosta (ns. N tietueet). Luku riippuu tietojoukon leveydestä, mitä leveämpi, sitä suurempi N voi olla. Tässä on satunnainen osa algoritmin nimestä tulee!
  2. Rakenna päätöspuu niiden perusteella N satunnaiset tietueet;
  3. Toista vaiheet 1 ja 2 algoritmille määritetyn puiden lukumäärän tai metsässä olevien puiden lukumäärän mukaan. Tämä luo lisää puita satunnaisten tietueiden sarjoista;
  4. Vaiheen 3 jälkeen tulee viimeinen vaihe, joka on tulosten ennustaminen:
    • Luokittelussa: jokainen metsän puu ennustaa kategoriaan, johon uusi ennätys kuuluu. Sen jälkeen uusi ennätys määrätään enemmistön saaneelle kategorialle.
    • Regression tapauksessa: jokainen metsässä oleva puu ennustaa arvon uudelle ennätykselle, ja lopullinen ennustearvo lasketaan ottamalla kaikkien metsän puiden ennustamien arvojen keskiarvo.

Kullakin satunnaiseen ominaisuuksien osajoukkoon sopivalla puulla ei välttämättä ole tietoa joistakin muista ominaisuuksista, mikä korjataan yhdistämällä, samalla kun laskennalliset kustannukset pidetään alhaisempana.

Neuvot: Koska Random Forest käyttää päätöspuita perustana, on erittäin hyödyllistä ymmärtää päätöspuiden toiminta ja harjoitella niitä erikseen intuition rakentamiseksi niiden rakenteeseen. Kun muodostat satunnaisia ​​metsiä, asetat arvoja, kuten puun enimmäissyvyyden, näytteiden vähimmäismäärän, joka vaaditaan lehtien solmukohdassa, kriteerit, joilla määritetään sisäiset halkeamat jne., jotta kokonaisuus sopii paremmin tietojoukko ja yleistää uusiin kohtiin. Käytännössä käytät yleensä Random Forests-, Gradient Boosting- tai Extreme Gradient Boosting -menetelmiä tai muita puupohjaisia ​​menetelmiä, joten yhden päätöspuun hyperparametrien hyvä käsitys auttaa rakentamaan vahvan intuition kokoonpanojen virittämiseen.

Intuitio puiden toiminnasta ja satunnaisten metsien ymmärtäminen – jäljellä on vain harjoitella niiden rakentamista, koulutusta ja viritystä datan perusteella!

Rakenna ja kouluta satunnaisia ​​metsämalleja Scikit-Learnin avulla

Tähän asti käytetyt esimerkit koskevat raskautta, asuinaluetta ja naisia ​​oli syytä.

Vuonna 2020 bangladeshilaiset tutkijat havaitsivat, että raskaana olevien naisten kuolleisuus oli edelleen erittäin korkea, etenkin kun otetaan huomioon maaseudulla asuvat. Tästä syystä he käyttivät IOT-valvontajärjestelmää analysoida äitien terveyden riskiä. IOT-järjestelmä keräsi tietoja eri sairaaloista, paikallisilta klinikoilta ja äitien terveydenhuolloilta Bangladeshin maaseutualueilta.

Kerätyt tiedot järjestettiin sitten CSV-tiedostoon ja lähetettiin osoitteeseen UCI:n koneoppimisvarasto.

Näitä tietoja käytämme harjoittelemaan ja yrittämään ymmärtää, onko raskaana olevalla naisella a matala, keskikokoinen or korkea kuolleisuuden riski.

Huomautuksia: voit ladata tietojoukon tätä.

Satunnaisen metsän käyttäminen luokittelussa

Koska haluamme tietää, onko naisella a matala, keskikokoinen or korkea kuolleisuusriski, tämä tarkoittaa, että teemme luokituksen kolmeen luokkaan. Kun ongelmalla on enemmän kuin kaksi luokkaa, sitä kutsutaan a moniklassinen ongelma, toisin kuin a binaarinen ongelma (jossa valitset yleensä kahden luokan välillä 0 ja 1).

Tässä ensimmäisessä esimerkissä toteutamme moniluokkaisen luokittelumallin Random Forest -luokittimella ja Pythonin Scikit-Learnilla.

Noudatamme tavanomaisia ​​koneoppimisvaiheita ratkaistaksemme tämän ongelman, joita ovat kirjastojen lataaminen, tietojen lukeminen, yhteenvetotilastojen tarkastelu ja datavisualisaatioiden luominen sen ymmärtämiseksi paremmin. Sitten tietojen esikäsittely ja jakaminen, jota seuraa mallin luominen, koulutus ja arviointi.

Kirjastojen tuominen

Käytämme Pandaa tietojen lukemiseen, Seabornia ja Matplotlibiä sen visualisointiin ja NumPyä upeiden apumenetelmien luomiseen:

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
Tietojoukon tuonti

Seuraava koodi tuo tietojoukon ja lataa sen pythoniin DataFrame:

dataset = pd.read_csv("../../datasets/random-forest/maternal_health_risk.csv")

Tarkastelemme tietojen viittä ensimmäistä riviä suorittamalla head() komento:

dataset.head()

Tämä tuottaa:

    Age SystolicBP  DiastolicBP BS      BodyTemp    HeartRate   RiskLevel
0   25  130         80          15.0    98.0        86          high risk
1   35  140         90          13.0    98.0        70          high risk
2   29  90          70          8.0     100.0       80          high risk
3   30  140         85          7.0     98.0        70          high risk
4   35  120         60          6.1     98.0        76          low risk

Täältä näemme kaikki tutkimuksen aikana kerätyt attribuutit.

  • Ikä: iät vuosina.
  • Systolinen verenpaine: verenpaineen ylempi arvo mmHg, merkittävä ominaisuus raskauden aikana.
  • Diastolinen verenpaine: alempi verenpaineen arvo mmHg, toinen merkittävä ominaisuus raskauden aikana.
  • BS: veren glukoosipitoisuudet molaarisena pitoisuutena, mmol/l.
  • HeartRate: leposyke lyönteinä minuutissa.
  • RiskLevel: riskitaso raskauden aikana.
  • BodyTemp: kehon lämpötila.

Nyt kun ymmärrämme enemmän siitä, mitä mitataan, voimme tarkastella datatyyppejä info():

dataset.info()

Tämä johtaa:


RangeIndex: 1014 entries, 0 to 1013
Data columns (total 7 columns):
 #   Column       Non-Null Count  Dtype  
---  ------       --------------  -----  
 0   Age          1014 non-null   int64  
 1   SystolicBP   1014 non-null   int64  
 2   DiastolicBP  1014 non-null   int64  
 3   BS           1014 non-null   float64
 4   BodyTemp     1014 non-null   float64
 5   HeartRate    1014 non-null   int64  
 6   RiskLevel    1014 non-null   object 
dtypes: float64(2), int64(4), object(1)
memory usage: 55.6+ KB

Katsomalla RangeIndex rivillä, voimme nähdä, että tietueita on 1014 ja sarake Non-Null Count ilmoittaa, että tiedoista ei ole puuttuvia arvoja. Tämä tarkoittaa, että meidän ei tarvitse käsitellä puuttuvia tietoja!

In Dtype sarakkeessa, voimme nähdä kunkin muuttujan tyypin. Tällä hetkellä, float64 sarakkeita kuten BS ja BodyTemp niillä on numeerisia arvoja, jotka voivat vaihdella millä tahansa alueella, kuten 15.0, 15.51, 15.76, 17.28, mikä tekee niistä numeerisesti jatkuvaa (voit aina lisätä 0:n liukulukuun, ad infinitem). Toisaalta muuttujat, kuten Age, SystolicBP, DiastolicBPja HeartRate ovat tyyppiä int64, tämä tarkoittaa, että luvut muuttuvat vain yksikön mukaan, kuten 11, 12, 13, 14 – meillä ei ole sykettä 77.78, se on joko 77 tai 78 – ne ovat numeerisesti diskreetti arvot. Ja meillä on myös RiskLevel kanssa object tyyppi, tämä tarkoittaa yleensä, että muuttuja on teksti, ja meidän on luultavasti muutettava se numeroksi. Koska riskitaso kasvaa matalasta korkeaksi, luokissa on oletettu järjestys, mikä osoittaa, että se on kategorisesti järjestysjärjestyksessä muuttuja.

Huomautuksia: on tärkeää tarkastella kunkin tiedon tyyppiä ja katsoa, ​​onko se järkevää sen kontekstin mukaan. Esimerkiksi puolet sykeyksiköstä ei ole järkevää, joten tämä tarkoittaa, että interger-tyyppi on riittävä diskreetille arvolle. Kun näin ei tapahdu, voit muuttaa tietojen tyyppiä Pandasin avulla astype() omaisuus - df['column_name'].astype('type').

Tietotyyppien tarkastelun jälkeen voimme käyttää describe() ottamaan huipun joissakin kuvaavissa tilastoissa, kuten kunkin sarakkeen keskiarvoissa, keskihajonnassa, kvantiileissa, datan minimi- ja enimmäisarvoissa:

dataset.describe().T 

Yllä oleva koodi näyttää:

            count   mean        std         min     25%     50%     75%     max
Age         1014.0  29.871795   13.474386   10.0    19.0    26.0    39.0    70.0
SystolicBP  1014.0  113.198225  18.403913   70.0    100.0   120.0   120.0   160.0
DiastolicBP 1014.0  76.460552   13.885796   49.0    65.0    80.0    90.0    100.0
BS          1014.0  8.725986    3.293532    6.0     6.9     7.5     8.0     19.0
BodyTemp    1014.0  98.665089   1.371384    98.0    98.0    98.0    98.0    103.0
HeartRate   1014.0  74.301775   8.088702    7.0     70.0    76.0    80.0    90.0
RiskLevel   1014.0  0.867850    0.807353    0.0     0.0     1.0     2.0     2.0

Huomaa, että useimmissa sarakkeissa tarkoittaa arvot ovat kaukana keskihajonta (std) – Tämä osoittaa, että tiedot eivät välttämättä seuraa hyvin käyttäytyvää tilastojakaumaa. Jos olisi, se olisi auttanut mallia riskin ennustamisessa. Mitä tässä voidaan tehdä, on esikäsitellä tiedot, jotta ne olisivat edustavampia ikään kuin ne olisivat tietoja koko maailman väestöstä tai enemmän normalisoitu. Mutta etu käytettäessä Random Forest -malleja luokittelu, on se, että luontainen puurakenne pystyy käsittelemään hyvin dataa, jota ei ole normalisoitu, kun se jakaa sen kunkin muuttujan kunkin puutason arvolla.

Lisäksi, koska käytämme puita ja tuloksena oleva luokka saadaan äänestämällä, emme luontaisesti vertaile eri arvoja, vain samantyyppisten arvojen välillä, joten ominaisuuksia ei tarvitse säätää samaan mittakaavaan tässä tapauksessa. . Tämä tarkoittaa, että Random Forest -luokitusmalli on asteikkoinvariantti, eikä sinun tarvitse suorittaa ominaisuuksien skaalausta.

Tässä tapauksessa tietojen esikäsittelyn vaihe, jonka voimme ottaa, on kategorisen muuntaminen RiskLevel sarake numeeriseksi.

Datan visualisointi

Ennen muuntamista RiskLevel, visualisoidaan myös tiedot nopeasti tarkastelemalla kunkin piirreparin pisteyhdistelmiä hajontakaaviolla ja kuinka pisteet jakautuvat visualisoimalla histogrammikäyrä. Käytämme tätä varten Seabornia pairplot() joka yhdistää molemmat juonet. Se luo molemmat kaaviot kullekin ominaisuusyhdistelmälle ja näyttää pisteet värikoodattuina niiden riskitason mukaan hue omaisuus:

g = sns.pairplot(dataset, hue='RiskLevel')
g.fig.suptitle("Scatterplot and histogram of pairs of variables color coded by risk level", 
               fontsize = 14, 
               y=1.05); 

Yllä oleva koodi luo:

Lopullinen opas satunnaiseen metsäalgoritmiin Pythonilla ja Scikit-Learn PlatoBlockchain Data Intelligencellä. Pystysuuntainen haku. Ai.

Tonttia tarkasteltaessa ihanteellinen tilanne olisi, että käyrät ja pisteet erotettaisiin selvästi toisistaan. Kuten näemme, kolme riskiluokkatyyppiä ovat enimmäkseen sekaisin, koska puut piirtävät sisäisesti viivoja rajattaessa pisteiden välisiä tiloja, joten voimme olettaa, että metsässä useampi puu voisi rajoittaa enemmän tiloja ja luokitella pisteet paremmin.

Kun perustutkimuksellinen data-analyysi on tehty, voimme esikäsitellä sen RiskLevel sarake.

Tietojen esikäsittely luokitusta varten

Varmasti on vain kolme luokkaa RiskLevel tietoihimme ja että muita arvoja ei ole lisätty virheellisesti, voimme käyttää unique() näyttääksesi sarakkeen yksilölliset arvot:

dataset['RiskLevel'].unique()

Tämä tuottaa:

array(['high risk', 'low risk', 'mid risk'], dtype=object)

Luokat on tarkistettu, nyt seuraava askel on muuttaa jokainen arvo luvuksi. Koska luokittelujen välillä on järjestys, voimme käyttää arvoja 0, 1 ja 2 merkitsemiseen matala, keskikokoinen ja korkea riskejä. Pythonin mukaan on monia tapoja muuttaa sarakkeiden arvoja yksinkertainen on parempi kuin monimutkainen mottona käytämme .replace() menetelmää ja korvaa ne yksinkertaisesti niiden kokonaislukuesitystavoilla:

dataset['RiskLevel'] = dataset['RiskLevel'].replace('low risk', 0).replace('mid risk', 1).replace('high risk', 2)

Arvojen vaihtamisen jälkeen voimme jakaa tiedot siihen, mitä käytetään mallin koulutukseen, the piirteet or X, ja mitä haluamme ennustaa, tarrat or y:

y = dataset['RiskLevel']
X = dataset.drop(['RiskLevel'], axis=1)

Kun X ja y sarjat ovat valmiita, voimme käyttää Scikit-Learnin train_test_split() menetelmä jakaa ne edelleen juna- ja testisarjoihin:

from sklearn.model_selection import train_test_split

SEED = 42
X_train, X_test, y_train, y_test = train_test_split(X, y, 
                                                    test_size=0.2, 
                                                    random_state=SEED)

Neuvo: muista käyttää satunnaista tilan siementä, jos haluat tehdä tuloksesta toistettavan. Olemme käyttäneet satunnaisen tilan siementä, jotta voit toistaa samat tulokset kuin oppaasta.

Tässä käytämme 20 % tiedoista testaukseen ja 80 % koulutukseen.

RandomForestClassifierin kouluttaminen

Tutustu käytännönläheiseen, käytännölliseen Gitin oppimisoppaaseemme, jossa on parhaat käytännöt, alan hyväksymät standardit ja mukana tuleva huijauslehti. Lopeta Git-komentojen googlailu ja oikeastaan oppia se!

Scikit-Learn toteutti kokoonpanot alle sklearn.ensemble moduuli. Luokittelussa käytetty päätöspuukokonaisuus, jossa enemmistöäänestys tehdään, toteutetaan nimellä RandomForestClassifier.

Kun juna ja testisarjat ovat, voimme tuoda ne RandomForestClassifier luokka ja luo malli. Aluksi luodaan metsä, jossa on kolme puuta asettamalla n_estimators parametriksi 3, ja jokaisella puulla on kolme tasoa, asettamalla max_depth2:

from sklearn.ensemble import RandomForestClassifier

rfc = RandomForestClassifier(n_estimators=3, 
                             max_depth=2,
                             random_state=SEED)

Huomautus: Kohteen oletusarvo n_estimators is 100. Tämä parantaa kokonaisuuden ennustevoimaa ja yleistymistä, mutta luomme pienemmän, jotta sen visualisointi ja tarkastaminen olisi helpompaa. Vain kolmella puulla – voimme visualisoida ja tarkastaa ne käsin kehittääksemme edelleen intuitiota sekä yksittäisistä puista että niiden rinnakkaisriippuvuudesta. Sama koskee max_depth, Joka on None, mikä tarkoittaa, että puut voivat mennä syvemmälle ja syvemmälle sovittaakseen tiedot tarpeen mukaan.

Sovitaaksemme mallin datan ympärille – kutsumme fit() menetelmä, syöttämällä koulutusominaisuudet ja tunnisteet:


rfc.fit(X_train, y_train)

y_pred = rfc.predict(X_test)

Voimme nyt verrata ennustettuja tarroja todellisiin tarroihin arvioidaksemme, kuinka hyvin malli menestyi! Ennen kuin arvioit mallin, katsotaanpa kokonaisuutta.

Katsoaksemme mallia hieman syvemmälle, voimme visualisoida jokaisen puun ja kuinka ne jakavat tiedot. Tämä voidaan tehdä käyttämällä tree Scikit-Learniin sisäänrakennettu moduuli ja sitten silmukan jokaisen kokoonpanon estimaattorin läpi:


from sklearn import tree

features = X.columns.values 
classes = ['0', '1', '2'] 



for estimator in rfc.estimators_:
    print(estimator)
    plt.figure(figsize=(12,6))
    tree.plot_tree(estimator,
                   feature_names=features,
                   class_names=classes,
                   fontsize=8, 
                   filled=True, 
                   rounded=True)
    plt.show()

Yllä oleva koodi näyttää puupiirrokset:

Lopullinen opas satunnaiseen metsäalgoritmiin Pythonilla ja Scikit-Learn PlatoBlockchain Data Intelligencellä. Pystysuuntainen haku. Ai.
Lopullinen opas satunnaiseen metsäalgoritmiin Pythonilla ja Scikit-Learn PlatoBlockchain Data Intelligencellä. Pystysuuntainen haku. Ai.
Lopullinen opas satunnaiseen metsäalgoritmiin Pythonilla ja Scikit-Learn PlatoBlockchain Data Intelligencellä. Pystysuuntainen haku. Ai.

Huomaa, kuinka nämä kolme puuta eroavat toisistaan. Ensimmäinen alkaa BS ominaisuus, toinen kanssa DiastolicBP, ja kolmas kanssa BS uudelleen. Vaikka kolmas tarkastelee erilaista näytteiden määrää. Oikealla oksalla kaksi ensimmäistä puuta myös päättää käyttää Age lehtien tasolla, kun taas kolmas puu päättyy BS ominaisuus. Vain kolmella estimaattorilla on selvää, kuinka skaalaus antaa rikkaan ja monipuolisen esityksen tiedosta, joka voidaan koota onnistuneesti erittäin tarkaksi malliksi.

Mitä enemmän puita metsässä on, sitä monipuolisempi malli voi olla. On syytä pienentää tuottoa, mutta koska monet puut sopivat satunnaiseen ominaisuuksien osajoukkoon, on olemassa melkoisesti samankaltaisia ​​puita, jotka eivät tarjoa paljon monimuotoisuutta kokonaisuudessa ja joilla alkaa olla liikaa äänivaltaa ja vinouttaa kokonaisuutta niin, että se sopisi liikaa harjoitustietojoukossa, mikä vahingoittaa yleistämistä validointijoukkoon.

Aiemmin tehtiin hypoteesi puiden lisäämisestä ja siitä, kuinka se voisi parantaa mallin tuloksia. Katsotaanpa tuloksia, luodaan uusi malli ja katsotaan, pitääkö hypoteesi paikkansa!

RandomForestClassifierin arviointi

Scikit-Learnin avulla on helppo luoda perusviivat tarjoamalla a DummyClassifier, joka tuottaa ennusteita ilman syöttöominaisuuksia (täysin satunnaiset lähdöt). Jos mallisi on parempi kuin DummyClassifier, jonkin verran oppimista tapahtuu! Oppimisen maksimoimiseksi – voit testata erilaisia ​​hyperparametreja automaattisesti käyttämällä a RandomizedSearchCV or GridSearchCV. Perustason lisäksi voit arvioida mallisi suorituskykyä useiden mittareiden linssin avulla.

Joitakin perinteisiä luokitusmittareita, joita voidaan käyttää algoritmin arvioimiseen, ovat tarkkuus, palautus, f1-pistemäärä, tarkkuus ja sekavuusmatriisi. Tässä on lyhyt selitys jokaisesta niistä:

  1. Tarkkuus: kun tavoitteenamme on ymmärtää, mitä oikeita ennustearvoja luokittelijamme piti oikeina. Tarkkuus jakaa todelliset positiiviset arvot näytteillä, jotka ennustettiin positiivisiksi;

$$
tarkkuus = frac{teksti{tosi positiiviset}}{teksti{tosi positiiviset} + teksti{väärät positiiviset}}
$$

  1. Palauttaa mieleen: lasketaan yleisesti tarkkuudella, jotta saadaan selville, kuinka monta todellista positiivista luokittimemme tunnisti. Palauttaminen lasketaan jakamalla todelliset positiiviset asiat millä tahansa, jonka olisi pitänyt ennustaa positiiviseksi.

$$
muistaminen = frac{teksti{tosi positiiviset}}{teksti{tosi positiiviset} + teksti{väärät negatiivit}}
$$

  1. F1 pisteet: on tasapainoinen tai harmoninen keskiarvo tarkkuudesta ja muistamisesta. Pienin arvo on 0 ja suurin on 1. Milloin f1-score on yhtä suuri kuin 1, se tarkoittaa, että kaikki luokat ennustettiin oikein – tämä on erittäin vaikea pistemäärä saada todellisella tiedolla (poikkeuksia on melkein aina).

$$
teksti{f1-pisteet} = 2* frac{teksti{tarkkuus} * teksti{recall}}{teksti{tarkkuus} + teksti{recall}}
$$

  1. Sekaannusmatriisi: kun meidän on tiedettävä, kuinka paljon näytteitä saimme oikein tai väärin jokainen luokka. Arvoja, jotka olivat oikein ja oikein ennustettu, kutsutaan tosi positiivisia, niitä, joiden ennustettiin olevan positiivisia, mutta jotka eivät olleet positiivisia, kutsutaan vääriä positiivisia. Sama nimikkeistö todellisia negatiivisia ja väärät negatiivit käytetään negatiivisille arvoille;

  2. tarkkuus: kuvaa kuinka monta ennustetta luokittimemme osui oikeaan. Pienin tarkkuusarvo on 0 ja suurin on 1. Tämä arvo yleensä kerrotaan 100:lla prosenttiosuuden saamiseksi:

$$
tarkkuus = murto{teksti{oikeiden ennusteiden määrä}}{teksti{ennusteiden kokonaismäärä}}
$$

Huomautus: On käytännössä mahdotonta saada 100 %:n tarkkuutta todellisista tiedoista, joihin haluat soveltaa koneoppimista. Jos näet 100 % tarkkuuden tai jopa lähes 100 % tuloksen – ole skeptinen ja suorita arviointi. Yleinen syy näihin ongelmiin on tietovuoto (koulutuksen testin osan vuotaminen testisarjaan suoraan tai epäsuorasti). Ei ole yksimielisyyttä siitä, mitä "hyvä tarkkuus on", ensisijaisesti siksi, että se riippuu tiedoistasi – joskus 70 prosentin tarkkuus on korkea! Joskus se on todella alhainen tarkkuus. Yleisesti ottaen, yli 70 % riittää monille malleille, mutta tämä on toimialueen tutkijan päätettävissä.

Voit suorittaa seuraavan komentosarjan tuodaksesi tarvittavat kirjastot ja tarkastellaksesi tuloksia:

from sklearn.metrics import classification_report, confusion_matrix

cm = confusion_matrix(y_test, y_pred)
sns.heatmap(cm, annot=True, fmt='d').set_title('Maternal risks confusion matrix (0 = low risk, 1 = medium risk, 2 = high risk)')

print(classification_report(y_test,y_pred))

Tulos näyttää suunnilleen tältä:

                precision    recall  f1-score   support

           0       0.53      0.89      0.66        80
           1       0.57      0.17      0.26        76
           2       0.74      0.72      0.73        47

    accuracy                           0.58       203
   macro avg       0.61      0.59      0.55       203
weighted avg       0.59      0.58      0.53       203

Lopullinen opas satunnaiseen metsäalgoritmiin Pythonilla ja Scikit-Learn PlatoBlockchain Data Intelligencellä. Pystysuuntainen haku. Ai.

Huomioi luokitusraportissa, että poisto on korkea, 0.89 luokassa 0, sekä tarkkuus että takaisinkutsu ovat korkeat luokassa 2, 0.74, 0.72 – ja luokassa 1, ne ovat alhaiset, erityisesti takaisinkutsu 0.17 ja tarkkuus 0.57 . Muistutuksen ja tarkkuuden välinen suhde kaikissa kolmessa luokassa on kuvattu erikseen F1 pistemäärä, joka on harmoninen keskiarvo muistamisen ja tarkkuuden välillä – malli tekee okei luokalle 0, melko huono luokalle 1 ja kunnollinen luokalle 2.

Mallilla on erittäin vaikea tunnistaa keskiriskisiä tapauksia.

Satunnaisen metsäluokittelijamme, jossa on vain 3 puuta, saavuttama tarkkuus on 0.58 (58 %) – tämä tarkoittaa, että se saa hieman yli puolet tuloksista oikein. Tämä on alhainen tarkkuus, ja sitä voitaisiin ehkä parantaa lisäämällä puita.

Sekaannusmatriisia tarkasteltaessa voimme nähdä, että suurin osa virheistä on luokiteltaessa 52 keskiriskin tietuetta alhaiseksi riskiksi, mikä antaa lisätietoa luokan 1 alhaisesta palautuksesta. Se on puolueellinen luokittelemaan keskiriskin potilaat matalariskisiksi. riskipotilaita.

Toinen asia, joka voidaan tarkistaa, jotta saadaan entistä enemmän tietoa, on se, mitkä ominaisuudet luokittelija ottaa eniten huomioon ennustaessaan. Tämä on tärkeä askel selitettäviä koneoppimisjärjestelmiäja auttaa tunnistamaan ja lieventämään harhaa malleissa.

Nähdäksemme sen, voimme käyttää feature_importances_ luokittelijan ominaisuus. Tämä antaa meille luettelon prosenttiosuuksista, jotta voimme myös käyttää feature_names_in_ ominaisuus saadaksesi kunkin ominaisuuden nimen, järjestää ne tietokehykseen, lajitella ne korkeimmasta pienimpään ja piirtää tulos:


features_df = pd.DataFrame({'features': rfc.feature_names_in_, 'importances': rfc.feature_importances_ })


features_df_sorted = features_df.sort_values(by='importances', ascending=False)


g = sns.barplot(data=features_df_sorted, x='importances', y ='features', palette="rocket")
sns.despine(bottom = True, left = True)
g.set_title('Feature importances')
g.set(xlabel=None)
g.set(ylabel=None)
g.set(xticks=[])
for value in g.containers:
    g.bar_label(value, padding=2)

Lopullinen opas satunnaiseen metsäalgoritmiin Pythonilla ja Scikit-Learn PlatoBlockchain Data Intelligencellä. Pystysuuntainen haku. Ai.

Huomaa, kuinka luokittelija ottaa enimmäkseen huomioon verensokeri, sitten hieman diastolista painetta, ruumiinlämpöä ja vain vähän ikää päätöksen tekemiseen. Tämä saattaa myös liittyä luokan 1 alhaiseen muistiin, ehkä keskiriskin tiedot liittyvät ominaisuuksiin, joita ei ole ottaa mallissa paljon huomioon. Voit yrittää leikkiä enemmän ominaisuuksien tärkeydellä tutkiaksesi tätä ja katsoa, ​​vaikuttavatko mallin muutokset käytettäviin ominaisuuksiin, myös jos joidenkin ominaisuuksien ja ennakoitujen luokkien välillä on merkittävä suhde.

On vihdoin aika luoda uusi malli, jossa on enemmän puita nähdäksesi kuinka se vaikuttaa tuloksiin. Luodaan rfc_ metsä, jossa on 900 puuta, 8 tasoa ja sama siemen. Paranevatko tulokset?

rfc_ = RandomForestClassifier(n_estimators=900, 
                             max_depth=7,
                             random_state=SEED)
rfc_.fit(X_train, y_train)
y_pred = rfc_.predict(X_test)

Mittareiden laskeminen ja näyttäminen:

cm_ = confusion_matrix(y_test, y_pred)
sns.heatmap(cm_, annot=True, fmt='d').set_title('Maternal risks confusion matrix (0 = low risk, 1 = medium risk, 2 = high risk) for 900 trees with 8 levels')

print(classification_report(y_test,y_pred))

Tämä tuottaa:

                precision    recall  f1-score   support

           0       0.68      0.86      0.76        80
           1       0.75      0.58      0.65        76
           2       0.90      0.81      0.85        47

    accuracy                           0.74       203
   macro avg       0.78      0.75      0.75       203
weighted avg       0.76      0.74      0.74       203

Lopullinen opas satunnaiseen metsäalgoritmiin Pythonilla ja Scikit-Learn PlatoBlockchain Data Intelligencellä. Pystysuuntainen haku. Ai.

Tämä osoittaa, kuinka puiden lisääminen ja erikoistuneiden puiden (korkeammat tasot) lisääminen on parantanut mittareitamme. Meillä on edelleen alhainen takaisinveto luokassa 1, mutta tarkkuus on nyt 74 %. Korkeariskisten tapausten luokittelussa F1-pistemäärä on 0.85, mikä tarkoittaa, että korkeariskiset tapaukset on nyt helpompi tunnistaa verrattuna edellisen mallin 0.73:een!

Päivittäisessä projektissa saattaa olla tärkeämpää tunnistaa suuren riskin tapaukset esimerkiksi tarkkuutta muistuttavalla mittarilla, joka tunnetaan myös ns. herkkyys tilastoissa. Yritä säätää joitain mallin parametreja ja tarkkaile tuloksia.

Tähän mennessä olemme saaneet yleiskäsityksen siitä, kuinka Random Forestia voidaan käyttää tietojen luokitteluun – seuraavassa osiossa voimme käyttää samaa tietojoukkoa eri tavalla nähdäksemme, kuinka sama malli ennustaa arvoja regressiolla.

Satunnaisten metsien käyttö regressioon

Tässä osiossa tutkimme kuinka Random Forest -algoritmia voidaan käyttää regressioongelmien ratkaisemiseen Scikit-Learnin avulla. Tämän algoritmin toteuttamisessa noudatettavat vaiheet ovat lähes identtisiä luokitteluvaiheiden kanssa, mallin tyypin ja ennustetun datan tyypin lisäksi - jotka ovat nyt jatkuvia arvoja - tietojen valmistelussa on vain yksi ero.

Koska regressio on tehty numeerisia arvoja – valitaan tietojoukosta numeerinen arvo. Olemme nähneet, että verensokeri oli tärkeä luokittelussa, joten sen pitäisi olla ennustettavissa muiden ominaisuuksien perusteella (koska jos se korreloi jonkin ominaisuuden kanssa, se korreloi myös sen kanssa).

Sen jälkeen mitä olemme tehneet luokittelussa, tuodaan ensin kirjastot ja sama tietojoukko. Jos olet jo tehnyt tämän luokitusmallille, voit ohittaa tämän osan ja siirtyä suoraan tietojen valmisteluun harjoittelua varten.

Kirjastojen ja tietojen tuonti
import pandas as pd
import numpy as np
import maplotlib.pyplot as plt
import seaborn as sns

dataset = pd.read_csv("../../datasets/random-forest/maternal_health_risk.csv")
Tietojen esikäsittely regressiota varten

Tämä on regressiotehtävä, joten luokkien ennustamisen sijaan voimme ennustaa jonkin tietojoukon numeerisista sarakkeista. Tässä esimerkissä BS sarake ennustetaan. Tämä tarkoittaa y tiedot sisältävät verensokeritiedotja X tiedot sisältävät kaikki ominaisuudet paitsi verensokerin. Erottamisen jälkeen X ja y dataa, voimme jakaa juna- ja testijoukot:

from sklearn.model_selection import train_test_split

SEED = 42

y = dataset['BS']
X = dataset.drop(['BS'], axis=1) 

X_train, X_test, y_train, y_test = train_test_split(X, y, 
                                                    test_size=0.2, 
                                                    random_state=SEED)
RandomForestRegressorin kouluttaminen

Nyt kun olemme skaalannut tietojoukkoamme, on aika kouluttaa algoritmimme ratkaisemaan tämä regressioongelma, muuttaa sitä hieman – luomme mallin, jossa on 20 puuta metsässä ja jokaisessa on 4 tasoa. Voit tehdä sen suorittamalla seuraavan koodin:

from sklearn.ensemble import RandomForestRegressor

rfr = RandomForestRegressor(n_estimators=20, 
                            max_depth=3, 
                            random_state=SEED)

rfr.fit(X_train, y_train)
y_pred = rfr.predict(X_test)

Löydät tiedot kaikista parametreista RandomForestRegressor virallisessa dokumentaatiossa.

Koska 20 puun piirtäminen ja katseleminen vaatisi jonkin verran aikaa ja omistautumista, voimme piirtää vain ensimmäisen nähdäksemme, miten se eroaa luokituspuusta:

from sklearn import tree

features = X.columns

first_tree = rfr.estimators_[0]

plt.figure(figsize=(15,6))
tree.plot_tree(first_tree,
               feature_names=features,
               fontsize=8, 
               filled=True, 
               rounded=True);

Lopullinen opas satunnaiseen metsäalgoritmiin Pythonilla ja Scikit-Learn PlatoBlockchain Data Intelligencellä. Pystysuuntainen haku. Ai.

Huomaa, että regressiopuulla on jo arvo jokaiseen solmuun kuuluvalle tiedolle. Nämä ovat arvot, joista lasketaan keskiarvo, kun yhdistetään 20 puuta. Seuraamalla mitä olemme tehneet luokittelussa, voit myös piirtää ominaisuuksien tärkeyttä nähdäksesi, mitä muuttujia regressiomalli ottaa enemmän huomioon arvojen laskennassa.

On aika siirtyä koneoppimisongelman ratkaisun viimeiseen ja viimeiseen vaiheeseen ja arvioida algoritmin suorituskykyä!

RandomForestRegressorin arviointi

Regressioongelmissa algoritmin arvioinnissa käytetyt metriikot ovat keskimääräinen absoluuttinen virhe (MAE), keskimääräinen neliövirhe (MSE) ja keskimääräinen neliövirhe (RMSE).

  1. Keskimääräinen absoluuttinen virhe (MAE): kun vähennämme ennustetut arvot todellisista arvoista, saadaan virheet, lasketaan yhteen näiden virheiden absoluuttiset arvot ja saadaan niiden keskiarvo. Tämä metriikka antaa käsityksen mallin kunkin ennusteen kokonaisvirheestä, mitä pienempi (lähempänä nollaa), sitä parempi.

$$
mae = (frac{1}{n})sum_{i=1}^{n}vasen | Todellinen – Ennustettu oikea |
$$

Huomautus: Saatat myös kohdata y ja ŷ merkintä yhtälöissä. The y viittaa todellisiin arvoihin ja ŷ ennustettuihin arvoihin.

  1. Keskimääräinen neliövirhe (MSE): se on samanlainen kuin MAE-metriikka, mutta se neliöi virheiden absoluuttiset arvot. Lisäksi, kuten MAE:n tapauksessa, mitä pienempi tai lähempänä nollaa, sitä parempi. MSE-arvo on neliöity, jotta suuret virheet ovat vielä suurempia. Yksi asia, johon on kiinnitettävä erityistä huomiota, on se, että sitä on yleensä vaikea tulkita sen arvojen koon ja sen vuoksi, että ne eivät ole samassa mittakaavassa.

$$
mse = summa_{i=1}^{D}(Todellinen – Ennustettu)^2
$$

  1. Root Mean Squared Error (RMSE): yrittää ratkaista MSE:n kanssa esiin nostetun tulkintaongelman hankkimalla sen lopullisen arvon neliöjuuren skaalatakseen sen takaisin samoihin datayksiköihin. Se on helpompi tulkita ja hyvä, kun täytyy näyttää tai näyttää datan todellinen arvo virheen kanssa. Se näyttää kuinka paljon tiedot voivat vaihdella, joten jos meillä on RMSE 4.35, mallimme voi tehdä virheen joko koska se lisäsi 4.35 todelliseen arvoon tai tarvitsi 4.35 päästäkseen todelliseen arvoon. Mitä lähempänä nollaa, sen parempi.

$$
rmse = sqrt{ summa_{i=1}^{D}(todellinen – ennustettu)^2}
$$

Voimme käyttää mitä tahansa näistä kolmesta mittarista verrata mallit (jos meidän on valittava yksi). Voimme myös verrata samaa regressiomallia eri argumenttiarvoilla tai eri tiedoilla ja sitten tarkastella arviointimittareita. Tämä tunnetaan nimellä hyperparametrien viritys – Oppimisalgoritmiin vaikuttavien hyperparametrien virittäminen ja tulosten tarkkailu.

Kun valitaan mallien välillä, ne, joissa on pienin virhe, toimivat yleensä paremmin. Malleja seurattaessa, jos mittarit huononivat, mallin edellinen versio oli parempi tai tiedoissa tapahtui merkittävä muutos, jotta malli toimisi huonommin.

Voit löytää nämä arvot seuraavan koodin avulla:

from sklearn.metrics import mean_absolute_error, mean_squared_error

print('Mean Absolute Error:', mean_absolute_error(y_test, y_pred))
print('Mean Squared Error:', mean_squared_error(y_test, y_pred))
print('Root Mean Squared Error:', np.sqrt(mean_squared_error(y_test, y_pred)))

Tulosteen tulee olla:

Mean Absolute Error: 1.127893702896059
Mean Squared Error: 3.0802988503933326
Root Mean Squared Error: 1.755078018320933

20 puulla keskimääräinen neliövirhe on 1.75, mikä on alhainen, mutta silti – puiden lukumäärää nostamalla ja muilla parametreilla kokeilemalla tämä virhe todennäköisesti pienenee vieläkin.

Random Forestin käytön edut

Kuten millä tahansa algoritmilla, sen käytössä on etuja ja haittoja. Kahdessa seuraavassa osiossa tarkastellaan satunnaisen metsän käytön etuja ja haittoja luokittelussa ja regressiossa.

  1. Satunnainen metsäalgoritmi ei ole harhaanjohtava, koska puita on useita ja jokainen puu on opetettu satunnaisen datan osajoukon perusteella. Pohjimmiltaan satunnainen metsäalgoritmi luottaa "joukon" voimaan; siksi algoritmin yleinen harhaaste pienenee.
  2. Tämä algoritmi on erittäin vakaa. Vaikka tietojoukkoon lisättäisiin uusi datapiste, kokonaisalgoritmiin ei vaikuta paljoakaan, koska uudet tiedot voivat vaikuttaa yhteen puuhun, mutta sen on erittäin vaikea vaikuttaa kaikkiin puihin.
  3. Satunnainen metsäalgoritmi toimii hyvin, kun sinulla on sekä kategorisia että numeerisia ominaisuuksia.
  4. Satunnainen metsäalgoritmi toimii hyvin myös silloin, kun tiedoista puuttuu arvoja tai sitä ei ole skaalattu.

Random Forestin käytön haitat

  1. Satunnaisten metsien suurin haittapuoli on niiden monimutkaisuus. Ne vaativat paljon enemmän laskennallisia resursseja, koska päätöspuita on liitetty yhteen suuri määrä, kun koulutetaan suuria ryhmiä. Tosin – nykyaikaisilla laitteilla suurenkaan satunnaisen metsän kouluttaminen ei vie paljoa aikaa.

Jatketaan eteenpäin – Kädessä pidettävä, päästä päähän -projekti

Utelias luonteesi saa sinut haluamaan pidemmälle? Suosittelemme tutustumaan meidän Ohjattu projekti: "Hands-on House Price Prediction – koneoppiminen Pythonissa".

Lopullinen opas satunnaiseen metsäalgoritmiin Pythonilla ja Scikit-Learn PlatoBlockchain Data Intelligencellä. Pystysuuntainen haku. Ai.

Tässä opastetussa projektissa opit rakentamaan tehokkaita perinteisiä koneoppimismalleja sekä syväoppimismalleja, hyödyntämään Ensemble Learningiä ja kouluttamaan meta-oppineita ennustamaan asuntojen hintoja Scikit-Learn- ja Keras-mallien pussin avulla.

Käyttämällä Kerasia, Tensorflow:n päälle rakennettua syväoppimissovellusliittymää, kokeilemme arkkitehtuuria, rakennamme joukon pinottuja malleja ja koulutamme meta-oppija hermoverkko (tason 1 malli) talon hinnoittelun selvittämiseksi.

Syväoppiminen on hämmästyttävää – mutta ennen kuin siihen turvaudutaan, on suositeltavaa yrittää ratkaista ongelma myös yksinkertaisemmilla tekniikoilla, kuten pinnallista oppimista algoritmeja. Lähtötason suorituskykymme perustuu a Satunnainen metsäregressio algoritmi. Lisäksi – tutkimme mallien ryhmien luomista Scikit-Learnin avulla esimerkiksi pussitus ja äänestys.

Tämä on päästä päähän -projekti, ja kuten kaikki koneoppimisprojektit, aloitamme – kanssa Tutkimusaineistoanalyysi, jonka jälkeen Tietojen esikäsittely ja lopuksi Rakennus matala ja Syväoppimismallit sopimaan aiemmin tutkimiimme ja puhdistamiimme tietoihin.

Aikaleima:

Lisää aiheesta Stackabus