Vraag:
Alternatieven voor logistische regressie in R
Tal Galili
2010-08-31 15:02:08 UTC
view on stackexchange narkive permalink

Ik zou graag zoveel algoritmen willen hebben die dezelfde taak uitvoeren als logistieke regressie. Dat zijn algoritmen / modellen die een voorspelling kunnen geven aan een binair antwoord (Y) met een verklarende variabele (X).

Ik zou blij zijn als je, nadat je het algoritme een naam geeft, ook zou laten zien hoe je implementeer het in R. Hier is een code die kan worden bijgewerkt met andere modellen:

  set.seed (55) n <- 100x <- c (rnorm (n), 1 + rnorm ( n)) y <- c (rep (0, n), rep (1, n)) r <- glm (y ~ x, family = binominaal) plot (y ~ x) abline (lm (y ~ x), col = 'rood', lty = 2) xx <- seq (min (x), max (x), lengte = 100) yy <- voorspellen (r, data.frame (x = xx), type = 'antwoord' ) regels (xx, yy, col = 'blue', lwd = 5, lty = 2) title (main = 'Logistische regressie met de "glm" -functie')  
Moeten we aannemen dat u een vaste set voorspellers overweegt, dat wil zeggen dat u geïnteresseerd bent in een betrouwbare voorspelling op basis van $ k $ voorspellers, of bent u ook geïnteresseerd in een vorm van bestraffing op de $ X_j \ quad (j = 1 \ dots k) $?
Ik geef toe dat voor mijn persoonlijk belang geen bestraffing nodig zou zijn, en omwille van de kennis hier zou ik zeggen dat beide relevante antwoorden zijn :)
Voor toekomstige referentie: u had deze vraag misschien zo kunnen formuleren dat we het als een niet-CW-vraag zouden hebben toegestaan. Zie http://meta.stats.stackexchange.com/questions/290/what-is-community-wiki
Bedankt voor de link Shane. Je hebt daar een heel interessante discussie geopend. Na het lezen van Thomasas antwoord, denk ik dat dit nog steeds een community-wiki zou moeten zijn, aangezien het mijn bedoeling was om zoveel mogelijk alternatieven te vinden (iets waarvan ik betwijfel of iemand het zou kunnen leveren). Nogmaals bedankt dat je me naar die draad hebt geleid!
Dit is niet echt te breed om te beantwoorden - het heeft momenteel 6 antwoorden (5 upvoted).Bovendien is de vraag zeer positief en zeer favoriet, en is CW.Het moet open blijven, IMO.
Zes antwoorden:
#1
+29
Joe
2010-08-31 15:13:21 UTC
view on stackexchange narkive permalink

Op dit moment populair zijn randomForest en gbm (MART of Gradient Boosting genoemd in machine learning-literatuur), rpart voor eenvoudige bomen. Ook populair is bayesglm, dat MAP gebruikt met priors voor regularisatie.

  install.packages (c ("randomForest", "gbm", "rpart", "arm")) bibliotheek (randomForest) bibliotheek (gbm) bibliotheek (rpart) bibliotheek (arm) r1 <- randomForest (y ~ x) r2 <- gbm (y ~ x) r3 <- rpart (y ~ x) r4 <- bayesglm (y ~ x, familie = binominaal) yy1 <- voorspellen (r1, data.frame (x = xx)) yy2 <- voorspellen (r2, data.frame (x = xx)) yy3 <- voorspellen (r3, data.frame (x = xx)) yy4 <- voorspellen (r4, data.frame (x = xx), type = "response")  
#2
+24
Joris Meys
2010-08-31 20:30:47 UTC
view on stackexchange narkive permalink

Eigenlijk hangt dat af van wat u wilt verkrijgen. Als u alleen logistieke regressie uitvoert voor de voorspellingen, kunt u elke gesuperviseerde classificatiemethode gebruiken die geschikt is voor uw gegevens. Een andere mogelijkheid: discriminantanalyse (lda () en qda () uit pakket MASS)

  r <- lda (y ~ x) # gebruik qda () voor kwadratische discriminantanalysexx <- seq (min (x), max (x), lengte = 100) voor <- voorspellen (r, data.frame (x = xx), type = 'antwoord') yy <- pred $ posterior [, 2] kleur <- c ( "red", "blue") plot (y ~ x, pch = 19, col = color [pred $ class]) abline (lm (y ~ x), col = 'red', lty = 2) regels (xx, yy, col = 'blue', lwd = 5, lty = 2) title (main = 'lda implementatie')  

Aan de andere kant, als je betrouwbaarheidsintervallen nodig hebt rond je voorspellingen of standaardfouten in uw schattingen, zullen de meeste classificatie-algoritmen u niet helpen. Je zou gegeneraliseerde additieve (gemengde) modellen kunnen gebruiken, waarvoor een aantal pakketten beschikbaar is. Ik gebruik vaak het mgcv-pakket van Simon Wood. Gegeneraliseerde additieve modellen bieden meer flexibiliteit dan logistieke regressie, aangezien u splines kunt gebruiken voor het modelleren van uw voorspellers.

  set.seed (55) vereist (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), familie = binominaal) xx <- seq (min (x1), max (x1), lengte = 100) xxx <- seq (min (x2) , max (x2), lengte = 100) yy <- voorspellen (r, data.frame (x1 = xx, x2 = xxx), type = 'respons') color = c ("rood", "blauw") clustering < - ifelse (r $ fitted.values ​​< 0.5,1,2) plot (y ~ x1, pch = 19, col = color [clustering]) abline (lm (y ~ x1), col = 'red', lty = 2 ) regels (xx, yy, col = 'blue', lwd = 5, lty = 2) title (main = 'gam implementatie')  

Er is nog veel meer te doen:

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

...

Ik zou het boek Simon Wood over gegeneraliseerde additieve modellen

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

Ik ben het met Joe eens, en zou toevoegen:

Elke classificatiemethode zou in principe kunnen worden gebruikt, hoewel deze afhankelijk is van de gegevens / situatie. U kunt bijvoorbeeld ook een SVM gebruiken, eventueel met het populaire C-SVM-model. Hier is een voorbeeld van kernlab met een radiale basis kernelfunctie:

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

Er zijn ongeveer 100 classificatie- en regressiemodellen die kunnen worden getraind via het caret-pakket. Elk van de classificatiemodellen is een optie voor u (in tegenstelling tot regressiemodellen, die een continue reactie vereisen). Om bijvoorbeeld een willekeurig forest te trainen:

  bibliotheek (caret) train (response ~., Data, method = "rf")  

Zie het caret model trainingsvignet dat bij de distributie wordt geleverd voor een volledige lijst van de beschikbare modellen. Het is opgesplitst in modellen voor tweeërlei gebruik en classificatiemodellen (die u beide kunt gebruiken) en alleen regressie (wat u niet kunt). caret traint automatisch de parameters voor het door u gekozen model.

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

Naive Bayes is een goede eenvoudige methode om gegevens te trainen om een ​​binair antwoord te vinden.

  bibliotheek (e1071) fitNB <- naiveBayes (y ~ x) voorspellen (fitNB, x)  
#6
+3
Ferdi
2016-09-15 18:33:22 UTC
view on stackexchange narkive permalink

Er zijn twee varianten van de logistische regressie die nog niet zijn beschreven. Ten eerste schat de logistische regressie kansen met behulp van een logistische functie die een cumulatieve logistieke verdeling is (ook bekend als sigmoïde). U kunt ook kansen schatten met behulp van functies die zijn afgeleid van andere verdelingen. De meest gebruikelijke manier naast de logistische regressie is de probitregressie die is afgeleid van de normale verdeling. Bezoek de volgende site voor een meer gedetailleerde bespreking tussen de verschillen tussen probit en logit.

Verschil tussen logit- en probit-modellen

  set. zaad (55) n <- 100x <- c (rnorm (n), 1 + rnorm (n)) y <- c (rep (0, n), rep (1, n)) r <- glm (y ~ x, family = binomial (link = "probit")) plot (y ~ x) abline (lm (y ~ x), col = 'red', lty = 2) xx <- seq (min (x), max ( x), lengte = 100) jj <- voorspellen (r, data.frame (x = xx), type = 'antwoord') regels (xx, yy, col = 'rood', lwd = 5, lty = 2) titel (main = 'Probit-regressie met de "glm" -functie')  

Het tweede alternatief wijst op een weekheid van de logistieke functie die je hebt geïmplementeerd. Als u een kleine steekproef heeft en / of waarden mist, is een logistieke functie niet aan te raden. Daarom is een exacte logistische regressie een beter model. De log-odds van de uitkomst worden gemodelleerd als een lineaire combinatie van de voorspellende variabelen.

  elrm (formule = y ~ x)  

Verder zijn er andere alternatieven die graag genoemd worden:

  1. Twee -way kruistabel
  2. Twee-groep discriminerende functieanalyse.
  3. Hotelling's T2.

Laatste opmerking: een logistieke regressie is hetzelfde als een klein neuraal netwerk zonder verborgen lagen en slechts één punt in de laatste laag. Daarom kun je implementaties van neurale netwerkpakketten gebruiken zoals nnet in R.

Bewerken:

Enkele weken later realiseerde ik me dat er ook de Winnow en de Perceptron -algoritme. Beide zijn classificaties die ook werken voor classificaties in twee groepen, maar beide zijn de afgelopen 15 jaar uit de gratie geraakt.



Deze Q&A is automatisch vertaald vanuit de Engelse taal.De originele inhoud is beschikbaar op stackexchange, waarvoor we bedanken voor de cc by-sa 2.0-licentie waaronder het wordt gedistribueerd.
Loading...