glmnet Fehler für die Logistische regression und binomialer
Ich bekomme diese Fehlermeldung, wenn Sie versuchen, um fit glmnet() mit family="binomial", für die Logistische Regression Passform:
> data <- read.csv("DAFMM_HE16_matrix.csv", header=F)
> x <- as.data.frame(data[,1:3])
> x <- model.matrix(~.,data=x)
> y <- data[,4]
> train=sample(1:dim(x)[1],287,replace=FALSE)
> xTrain=x[train,]
> xTest=x[-train,]
> yTrain=y[train]
> yTest=y[-train]
> fit = glmnet(xTrain,yTrain,family="binomial")
Error in lognet(x, is.sparse, ix, jx, y, weights, offset, alpha, nobs, :
one multinomial or binomial class has 1 or 0 observations; not allowed
Jegliche Hilfe würde sehr geschätzt werden - ich habe im internet gesucht und wurden nicht in der Lage, zu finden alles, was hilft,
EDIT:
Hier ist, was Daten Aussehen:
> data
V1 V2 V3 V4
1 34927.00 156.60 20321 -12.60
2 34800.00 156.60 19811 -18.68
3 29255.00 156.60 19068 7.50
4 25787.00 156.60 19608 6.16
5 27809.00 156.60 24863 -0.87
...
356 26495.00 12973.43 11802 6.35
357 26595.00 12973.43 11802 14.28
358 26574.00 12973.43 11802 3.98
359 25343.00 14116.18 11802 -2.05
- Sind Sie sicher, dass Ihre
yTrain
enthält mindestens 2 unterschiedliche Werte? - Absolut. Es gibt 287 unterschiedliche Werte und ich habe überprüft, um sicherzustellen, dass es nicht eine matrix und ein Vektor.
- Ich habe auch versucht nur mit glmnet(x,y,family="binomial"), brachte den gleichen Fehler.
- Gut, hängen an; Ihre
V4
variable scheint kontinuierlich zu sein, nicht Binär. Sie können nicht passen Sie ein logistisches Modell mit. - ahhhhhh! gotcha, das hat funktioniert (und Sinn macht). Ich konnte laufen glmnet() wenn Familie <> "binomial", aber es brach, als ich es. Ich fügte diesen code und es funktionierte: trigger = 5 y <- ifelse(Daten$V4 > trigger,1,0)
- setzen Sie diese als Kommentar und ich werde es akzeptieren, wie die Antwort
- Dieser Fehler kann auch auftreten, legitim (wenn die Ziel-variable ein Faktor ist), z.B. im Lebenslauf.glmnet, für einige Entscheidungen, die von random seed, esp. mit schweren Klasse Ungleichgewichte, wenn man in der CV-Falten tatsächlich am Ende mit nur 0 oder 1 Beobachtung. Da tritt nach dem Zufallsprinzip, haben Sie, um ordnungsgemäß zu behandeln es.
- Ich Laufe in das gleiche problem, wo hast du den code hinzufügen "trigger = 5 y <- ifelse(Daten$V4 > trigger,1,0)" ?
- wenn Sie eine 'binomial', dann müssen Sie sicherstellen, dass Ihre Daten ist Binär (entweder 1 oder 0) und nicht kontinuierliche variable. So fügen Sie die cutoff-und switch-zu-Binär-nach dem Import der Daten aber beforerunning das Modell
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, es ist, weil die Ebenen der Faktor-variable. Angenommen, es gibt 10 Ebenen und 1 Ebene hat nur einen Datensatz, versuchen Sie, entfernen Sie diese Ebene. Sie können verwenden Sie drop-Ebenen von
gdata
Paket.Dies ist in der Regel aufgrund der Struktur der Daten und Ihre Reaktion variabel, manchmal ist die Antwort mehr als die binäre Ausgabe. oder die Daten der antwortvariablen binären heraus kommen, aber Sie haben viel mehr eine Klasse von der anderen. Deshalb ist das problem dann auftreten, während der Ausbildung und Prüfung der Daten. Also, müssen Sie konvertieren Sie das response-Variablen in Binär -, wenn mehr als zwei Ergebnisse, 2. Sie können für
multinomial
als Bezug aufbinomial
. Hoffe das kann dir helfen.