Pitanje:
Najbolji način za predstavljanje slučajne šume u publikaciji?
danielsbrewer
2010-09-03 18:50:52 UTC
view on stackexchange narkive permalink

Koristim algoritam slučajnih šuma kao robusni klasifikator dviju skupina u studiji mikro-niza s 1000 značajki.

  • Koji je najbolji način da se slučajna šuma predstavi tako da ima dovoljno informacija da bi se učinila ponovljivom u radu?
  • Postoji li metoda zacrtavanja u R za stvarno iscrtavanje stablo, ako postoji mali broj značajki?
  • Je li OOB-ova procjena stope pogreške najbolja statistika za citiranje?
Ne postoji niti jedno stablo ... Ali pogledajte odgovor @Shane's za crtanje jednog od njih u ilustrativne svrhe.
Svakako vrijedi razmotriti randomForest :: djelomičniPlot, http://stats.stackexchange.com/questions/92150/r-what-do-i-see-in-partial-dependence-plots-of-gbm-and-randomforest/112603# 112603
možete isprobati moj slučajni paket za vizualizaciju šuma, forestFloor - http://forestfloor.dk/
Tri odgovori:
#1
+50
Shane
2010-09-03 19:32:35 UTC
view on stackexchange narkive permalink

Što se tiče mogućnosti ponovljivosti, najbolji je način pružiti ponovljivo istraživanje (tj. kod i podatke) zajedno s radom. Učinite ga dostupnim na vašoj web stranici ili na web lokaciji za hosting (poput github-a).

Što se tiče vizualizacije, Leo Breiman je učinio nekoliko zanimljivih radova na ovome (posebice pogledajte njegovu početnu stranicu). odjeljak o grafici).

Ali ako koristite R, tada paket randomForest ima neke korisne funkcije:

  podaci (mtcars) mtcars.rf <- randomForest (mpg ~., data = mtcars, ntree = 1000, keep.forest = FALSE, important = TRUE) ploha (mtcars.rf, log = "y") varImpPlot (mtcars.rf)  

I

  set.seed (1) podaci (iris) iris.rf <- randomForest (Vrste ~., iris, blizina = TRUE, keep.forest = FALSE) MDSplot (iris.rf, iris $ Species)  

Nisam svjestan jednostavnog načina za stvarno iscrtavanje stabla, ali možete koristiti funkcija getTree za dohvaćanje stabla i zasebno iscrtavanje.

  getTree (randomForest (iris [, - 5], iris [, 5], ntree = 10) , 3, labelVar = TRUE)  

The Strobl / Zeileisova prezentacija na temu "Zašto i kako koristiti slučajne mjere važnosti promjenjivih šuma (i kako ne biste smjeli)" sadrži primjere stabala koja su morala biti proizvedena na ovaj način. Ovaj post na blogu o modelima stabala sadrži nekoliko lijepih primjera CART-a na stablima koje možete koristiti, na primjer.

Kao što je @chl komentirao, jedno stablo u ovome nije posebno značajno kontekstu, tako da ga ne bih koristio da objasnim što je slučajna šuma, ne bih to uključio u članak.

Malo proširenje o parcelama: `plot.randomForest` pokazuje kako su se OOB pogreške i OOB pogreške u klasi razvijale s povećanjem broja stabala; `varImpPlot` prikazuje mjere važnosti atributa za gornje atribute i` MDSplot` sve objekte ucrtane na 2D projekciji mjere blizine RF objekta.
+1 za citiranje funkcije `MDSplot ()`. Moram priznati da RF često koristim kao način da istaknem klastere pojedinaca (na temelju mjere blizine RF) umjesto da odaberem najbolje značajke. Kliničari često puno lakše čitaju takve zavjere nego dot plota var. važnost...
#2
+18
user88
2010-09-04 00:22:57 UTC
view on stackexchange narkive permalink
  1. Kao što je Shane napisao; učinite to ponovljivim istraživanjem + uključite nasumično sjeme, jer je RF stohastičan.
  2. Prije svega, crtanje pojedinačnih stabala koja čine RF je besmislica; ovo je klasifikator ansambla, ima smisla samo u cjelini. No, čak i crtanje cijele šume besmislica je - klasifikator je crne kutije, pa nije namijenjen objašnjavanju podataka svojom strukturom, nego repliciranju izvornog postupka. Umjesto toga, napravite neke parcele koje je Shane predložio.
  3. U praksi je OOB vrlo dobra aproksimacija pogreške; ipak to nije široko prihvaćena činjenica, pa je za objavu bolje napraviti i životopis kako biste je potvrdili.
Dakle, @mbq kada radi životopis vrijedi li prvo napraviti slučajnu šumu sa svim odabranim uzorcima; radeći to dva puta jednom sa svim i drugo s top 10 varijabli (koje se mogu citirati u radu). Zatim napravite unakrsnu provjeru (izostavite 10 najboljih gena u svakom pokušaju) i navedite CV pogrešku iz toga?
@danielsbrewer Ja bih to učinio na neki drugi način (obraćajući više pažnje na odabir značajke), ali to je točno; ipak je više na temi usporedbe odabira RF značajki nego na odabiru najboljih biljega za vaš biološki problem.
@mbq, žao mi je što nastavljam, ali vrlo sam nov u području klasifikacije nagnutog prema stroju. Pa, ako biste željeli odabrati najbolje diskriminirajuće markere za moju vrstu problema, kako biste to poduzeli? i koju biste pogrešku prijavili? Cijenim sve uloge.
Glavni je problem što je stvarno teško usporediti dva modela (model = metoda učenja + metoda odabira značajke), ali radi jednostavnosti možete samo pretpostaviti nešto (kao što ću koristiti RF i odabrati 10 najboljih atributa) i priznati da znate da ovo može biti neoptimalno, ali u tome se slažete iako ste, na primjer, zadovoljni točnošću. U tom je slučaju vaš jedini problem ukloniti pristranost odabira atributa. tbc.
Dakle, učinio bih jednostavno spakiranje: stvorite 10 (ili 30 ako imate dobro računalo) slučajnih poduzorka predmeta (recimo slučajnim odabirom s zamjenom), trenirate RF na svakom, shvatite njegovu važnost i vratite rang svakog atribut prosječan za sva ponavljanja (najbolji atribut dobiva rang 1, drugi najbolji 2 i tako dalje; može se prosječiti tako da atribut koji je bio 12 puta 1. i 18 puta 2. ima rang 1.6), na kraju odaberite 10 s najboljim rangom i nazovite ih svoje markere. Zatim upotrijebite CV (LOO, deseterostruko ili po mogućnosti slučajno uzorkovanje) da biste pomoću vaših markera dobili aproksimaciju RF pogreške. tbc.
Prijavite redoslijed (nadam se da bi trebali biti prilično blizu 1,2,3 ...), CV pogrešku s njezinim odstupanjem (samo prebrojite standardno odstupanje rezultata svakog kruga CV) i OOB pogrešku (vjerojatno će biti identična CV pogrešci). ODRICANJE ODGOVORNOSTI: Ovo nije metoda za odabir optimalnog broja atributa - za to vam trebaju RFE i ugniježđeni CV. ODRICANJE ODGOVORNOSTI2: Nisam radio s takvim podacima, pa ne garantiram da će vaši suci biti zadovoljni (iako vjerujem da bi trebali).
#3
+13
Patrick Caldon
2012-12-05 11:03:49 UTC
view on stackexchange narkive permalink

Imajte na umu upozorenja u ostalim odgovorima o zavjeri koja je nužno značajna. Ali ako želite zavjeru u ilustrativne / pedagoške svrhe, sljedeći isječak R mogao bi biti koristan. Nije teško dodati "točku razdvajanja" u rubni tekst ako vam treba.

  to.dendrogram <- funkcija (dfrep, rownum = 1, height.increment = 0.1) {if (dfrep [rownum, 'status'] == -1) {rval <- list () attr (rval, "members") <- 1 attr (rval, "height") <- 0,0 attr (rval, "label") < - dfrep [rownum, 'predviđanje'] attr (rval, "leaf") <- TRUE} else {## zabilježite promjenu "to.dendrogram", a ne "to.dendogram" left <- to.dendrogram (dfrep, dfrep [rownum, 'lijeva kći'], height.increment) desno <- to.dendrogram (dfrep, dfrep [rownum, 'desna kći'], height.increment) rval <- popis (lijevo, desno) attr (rval, " članovi ") <- attr (lijevo," članovi ") + attr (desno," članovi ") attr (rval," visina ") <- max (attr (lijevo," visina "), attr (desno," visina " )) + height.increment attr (rval, "leaf") <- FALSE attr (rval, "edgetext") <- dfrep [rownum, 'split var'] #Dodati Split Point i n Dendrogram #attr (rval, "edgetext") <- paste (dfrep [rownum, 'split var'], "\ n<", okrugli (dfrep [rownum, 'split point'], znamenke = 2), "= > ", sep =" ")} klasa (rval) <-" dendrogram "return (rval)} mod <- randomForest (Vrste ~., podaci = iris) stablo <- getTree (mod, 1, labelVar = TRUE) d < - to.dendrogram (stablo) str (d) ploha (d, središte = TRUE, leaflab = 'none', edgePar = list (t.cex = 1, p.col = NA, p.lty = 0))  kod> 
Kod daje vrlo dobru plohu stabla.Ali vrijednosti se ne prikazuju.Vjerojatno treba dodati funkciju text () nakon posljednjeg (plot) izraza.


Ova pitanja su automatski prevedena s engleskog jezika.Izvorni sadržaj dostupan je na stackexchange-u, što zahvaljujemo na cc by-sa 2.0 licenci pod kojom se distribuira.
Loading...