Pitanje:
Alternative logističkoj regresiji u R
Tal Galili
2010-08-31 15:02:08 UTC
view on stackexchange narkive permalink

Želio bih što više algoritama koji izvode isti zadatak kao i logistička regresija. To su algoritmi / modeli koji mogu dati predviđanje binarnom odgovoru (Y) s nekom objašnjavajućom varijablom (X).

Bilo bi mi drago da nakon što imenujete algoritam, ako također pokažete kako implementirajte ga u R. Evo koda koji se može ažurirati s drugim modelima:

  set.seed (55) n <- 100x <- c (rnorm (n), 1 + rnorm ( n)) y <- c (rep (0, n), rep (1, n)) r <- glm (y ~ x, obitelj = binom) plot (y ~ x) abline (lm (y ~ x), col = 'crvena', lty = 2) xx <- seq (min (x), max (x), length = 100) yy <- predvidjeti (r, data.frame (x = xx), type = 'response' ) redovi (xx, yy, col = 'plavi', lwd = 5, lty = 2) naslov (glavni = 'Logistička regresija s funkcijom "glm")  
Moramo li pretpostaviti da razmatrate fiksni skup prediktora, tj. Želite li dobiti pouzdano predviđanje s obzirom na $ k $ prediktora ili ste također zainteresirani za neku vrstu kazne na $ X_j \ quad (j = 1 \ točkice k) $?
Priznajem da zbog mog osobnog interesa kažnjavanje ne bi bilo potrebno, a zbog znanja ovdje rekao bih da su oba relevantna odgovora :)
Za buduću referencu: možda ste mogli postaviti ovo pitanje na takav način da bismo to dopustili kao pitanje koje nije CW. Pogledajte http://meta.stats.stackexchange.com/questions/290/what-is-community-wiki
Hvala na poveznici Shane. Vrlo zanimljiva rasprava koju ste tamo otvorili. Nakon što sam pročitao Thomasasov odgovor, vjerujem da bi ovo ipak trebao biti wiki zajednice, jer mi je namjera bila pronaći što više alternativa (nešto za što sumnjam da bi ga bilo koja osoba mogla ponuditi). Ipak, opet, hvala vam što ste me uputili na tu nit!
Ovo zapravo nije preširoko da bi se na njega moglo odgovoriti - trenutno ima 6 odgovora (5 glasova za).Štoviše, pitanje je visoko glasano i omiljeno, te je CW.Trebao bi ostati otvoren, IMO.
šest odgovori:
#1
+29
Joe
2010-08-31 15:13:21 UTC
view on stackexchange narkive permalink

Trenutno su popularni randomForest i gbm (koji se u literaturi o strojnom učenju nazivaju MART ili Gradient Boosting), rpart za jednostavna stabla. Također je popularan bayesglm, koji koristi MAP s priorima za regularizaciju.

  install.packages (c ("randomForest", "gbm", "rpart", "arm")) knjižnica (randomForest) knjižnica (gbm) knjižnica (rpart) knjižnica (ruka) r1 <- randomForest (y ~ x) r2 <- gbm (y ~ x) r3 <- rpart (y ~ x) r4 <- bayesglm (y ~ x, obitelj = binomni) yy1 <- predviđanje (r1, data.frame (x = xx)) yy2 <- predviđanje (r2, data.frame (x = xx)) yy3 <- predviđanje (r3, data.frame (x = xx)) yy4 <- predvidjeti (r4, data.frame (x = xx), type = "response")  
#2
+24
Joris Meys
2010-08-31 20:30:47 UTC
view on stackexchange narkive permalink

Zapravo, to ovisi o tome što želite dobiti. Ako logističku regresiju izvodite samo za predviđanja, možete koristiti bilo koju nadziranu metodu klasifikacije prikladnu za vaše podatke. Druga mogućnost: diskriminantna analiza (lda () i qda () iz paketa MASS)

  r <- lda (y ~ x) # koristi qda () za kvadratnu diskriminantnu analizuxx <- seq (min (x), max (x), length = 100) pred <- predvidjeti (r, data.frame (x = xx), type = 'response') yy <- pred $ posterior [, 2] boja <- c ( "crvena", "plava") crta (y ~ x, pch = 19, col = boja [pred $ class]) abline (lm (y ~ x), col = 'crvena', lty = 2) crte (xx, yy, col = 'blue', lwd = 5, lty = 2) naslov (main = 'lda provedba')  

S druge strane, ako su vam potrebni intervali povjerenja oko vaših predviđanja ili standardne pogreške u vašim procjenama, većina algoritama klasifikacije vam neće pomoći. Možete koristiti generalizirane aditivne (mješovite) modele za koje je dostupan veći broj paketa. Često koristim mgcv paket Simon Wood. Generalizirani aditivni modeli omogućuju veću fleksibilnost od logističke regresije, jer za modeliranje svojih prediktora možete koristiti сплаjnove.

  set.seed (55) require (mgcv) n <- 100x1 <- c (rnorm ( n), 1 + rnorm (n)) x2 <- sqrt (c (rnorm (n, 4), rnorm (n, 6))) y <- c (rep (0, n), rep (1, n) ) r <- gam (y ~ s (x1) + s (x2), obitelj = binom) xx <- seq (min (x1), max (x1), dužina = 100) xxx <- seq (min (x2) , max (x2), duljina = 100) yy <- predvidjeti (r, data.frame (x1 = xx, x2 = xxx), type = 'response') color = c ("crvena", "plava") klasterizacija < - ifelse (r $ fit.values ​​< 0,5,1,2) ploha (y ~ x1, pch = 19, col = boja [klasteriranje]) abline (lm (y ~ x1), col = 'crvena', lty = 2 ) redovi (xx, yy, col = 'plavi', lwd = 5, lty = 2) naslov (glavni = 'implementacija igre')  

Još puno toga treba učiniti:

  op <- par (mfrow = c (2,1)) plot (r, all.terms = T) par (op) summary (r) anova (r) r2 <- gam ( y ~ s (x1), obitelj = binom) anova (r, r2, test = "Chisq")  

...

Preporučio bih knjigu Simona Wooda o generaliziranim aditivnim modelima

#3
+14
Shane
2010-08-31 18:02:43 UTC
view on stackexchange narkive permalink

Slažem se s Joeom i dodao bih:

U načelu se može koristiti bilo koja metoda klasifikacije, iako će to ovisiti o podacima / situaciji. Na primjer, možete koristiti i SVM, možda s popularnim modelom C-SVM. Evo primjera iz kernlaba koji koristi funkciju jezgre radijalne baze:

  knjižnica (kernlab) x <- rbind (matrica (rnorm (120) ,, 2), matrica (rnorm (120, mean = 3) ,, 2)) y <- matrica (c (rep (1,60), rep (-1,60))) svp <- ksvm (x, y, type = "C-svc") plot (svp , podaci = x)  
#4
+12
jphoward
2010-12-31 20:56:21 UTC
view on stackexchange narkive permalink

Postoji oko 100 modela klasifikacije i regresije koji se mogu obučiti putem paketa caret. Bilo koji od klasifikacijskih modela bit će opcija za vas (za razliku od regresijskih modela koji zahtijevaju kontinuirani odgovor). Na primjer za obuku slučajne šume:

  knjižnica (karata) vlak (odgovor ~., Podaci, metoda = "rf")  

Pogledajte karetu vinjeta za obuku modela koja dolazi s distribucijom za cjelokupni popis dostupnih modela. Podijeljen je na modele s dvostrukom namjenom i klasifikaciju (oba možete koristiti) i samo na regresiju (što ne možete). caret će automatski obučiti parametre za vaš odabrani model.

#5
+7
IEORTools
2011-11-22 20:26:26 UTC
view on stackexchange narkive permalink

Naive Bayes dobra je jednostavna metoda obuke podataka za pronalaženje binarnog odgovora.

  knjižnica (e1071) fitNB <- naiveBayes (y ~ x) predviđanje (fitNB, x)  kod> 
#6
+3
Ferdi
2016-09-15 18:33:22 UTC
view on stackexchange narkive permalink

Postoje dvije varijacije logističke regresije koje još nisu navedene. Prvo, logistička regresija procjenjuje vjerojatnosti pomoću logističke funkcije koja je kumulativna logistička raspodjela (poznata i kao sigmoidna). Vjerojatnosti također možete procijeniti pomoću funkcija izvedenih iz drugih distribucija. Najčešći način osim logističke regresije je probit regresija koja je izvedena iz normalne raspodjele. Za detaljniju raspravu između razlika između probit i logit posjetite sljedeće mjesto.

Razlika između logit i probit modela

  set. sjeme (55) n <- 100x <- c (rnorm (n), 1 + rnorm (n)) y <- c (rep (0, n), rep (1, n)) r <- glm (y ~ x, obitelj = binom (link = "probit")) ploha (y ~ x) abline (lm (y ~ x), col = 'crvena', lty = 2) xx <- seq (min (x), max ( x), length = 100) yy <- predviđati (r, data.frame (x = xx), type = 'response') retke (xx, yy, col = 'crveni', lwd = 5, lty = 2) naslov (main = 'Probit regresija s funkcijom "glm")  

Druga alternativa ukazuje na tjednost logističke funkcije koju ste implementirali. Ako imate malu veličinu uzorka i / ili nedostaju vrijednosti, logistička funkcija nije poželjna. Stoga je točna logistička regresija bolji model. Log šanse za ishod modelirane su kao linearna kombinacija prediktorskih varijabli.

  elrm (formula = y ~ x)  

Nadalje postoje i druge alternative koje bismo htjeli spomenuti:

  1. Dvije tablica nepredviđenih događaja
  2. Dvoskupinska analiza diskriminirajuće funkcije.
  3. Hotellingov T2.

Završna napomena: Logistička regresija je ista kao i mala neuronska mreža bez skrivenih slojeva i samo jedna točka u završnom sloju. Stoga možete koristiti implementacije paketa neuronske mreže poput nnet u R.

Edit:

Nekoliko tjedana kasnije shvatio sam da postoji i Winnow i Perceptron algoritam. Oboje su klasifikatori koji rade i za razvrstavanje u dvije skupine, ali obojica su propali u zadnjih 15 godina.



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...