Prédire la fonction d'erreur pour les probabilités dans glmnet?
Je suis en train d'essayer de prédire les probabilités dans un dataset à l'aide glmnet
. Mon code se lit comme suit:
bank <- read.table("http://www.stat.columbia.edu/~madigan/W2025/data/BankSortedMissing.TXT",header=TRUE)
bank$rich<-sample(c(0:1), 233, replace=TRUE)
train=bank[1:200,];
test=bank[201:233,]
x=model.matrix(rich~., bank)[,-1]
cv.out=cv.glmnet(x, train$rich, alpha=0, family="binomial")
ridge.mod=glmnet(x, train$rich, alpha=0, family="binomial")
bank$rich <- NULL
newx = data.matrix(test$rich)
ridge.pred=predict(ridge.mod,newx=newx)
train = data[1:2500,];
test = data[2501:5088,];
x=model.matrix(Y~x1+x2+x3+x4+x5+x6, data)[,-1]
cv.out=cv.glmnet(x, data$Y, alpha=0, family="binomial")
bestlam=cv.out$lambda.min
ridge.mod=glmnet(x, data$Y, alpha=0, family="binomial")
test$Y <- NULL
newx = data.matrix(test)
ridge.pred = predict(ridge.mod,newx=newx, type="response")
Je reçois ce message d'erreur lors de l'utilisation de prédire:
Erreur.matrice(cbind2(1, newx) %*% nbeta) :
erreur dans l'évaluation de l'argument " x " dans la sélection d'une méthode pour la fonction 'comme.matrice': Erreur dans la t(.Appel(Csparse_dense_crossprod, y, t(x))) :
erreur dans l'évaluation de l'argument " x "dans la sélection d'une méthode pour la fonction "t": Erreur: Cholmod erreur "X et/ou Y avoir de mauvaises dimensions" au fichier ../MatrixOps/cholmod_sdmult.c, la ligne 90
J'ai essayé cela sur les "Frappeurs" dataset et il fonctionne parfaitement bien.
library(ISLR);
library(glmnet)
Hitters=na.omit(Hitters)
Hitters$Rich<-ifelse(Hitters$Salary>500,1,0)
Hitters.train = Hitters[1:200,]
Hitters.test = Hitters[201:dim(Hitters)[1],]
x=model.matrix(Rich~.,Hitters)[,-1]
cv.out=cv.glmnet(x, Hitters$Rich, alpha=0, family="binomial")
bestlam=cv.out$lambda.min
ridge.mod=glmnet(x, Hitters$Rich, alpha=0,lambda=bestlam, family="binomial")
Hitters.test$Rich <- NULL
newx = data.matrix(Hitters.test)
ridge.pred=predict(ridge.mod,newx=newx, type="response")
head(ridge.pred)
ridge.pred[1:10,]
Personne ne sait comment je peux résoudre ce problème?
J'ai ajouté un reproductibles partie ci-dessus
Merci! Nous allons voir si nous pouvons migrer pour vous maintenant.
Merci pour votre aide. Cela a été estompe moi pendant des heures.
Juste pour baliser une réponse à cette réponse puisque c'est le premier résultat google pour cette erreur spécifique. En plus de la
null
problème causé par l'utilisation de cette fonction avec model.matrix
, cette erreur peut également se produire lorsque votre test x n'a pas les mêmes variables trouvé dans le train x.
OriginalL'auteur | 2015-03-12
Vous devez vous connecter pour publier un commentaire.
J'ai eu le même problème et je pense que c'est causé par la formation et les tests ayant différents facteurs ainsi une dimension différente pour les matrices creuses.
Ma solution est de créer la matrice creuse X pour l'ensemble de données combinées
traintest=rbind(training,testing)
C'est juste pour s'assurer que le test mis a la même dimension.
OriginalL'auteur Ruge
Semble que vous avez juste la mauvaise chose d'être affecté à newx. Au lieu de:
bank$rich <- NULL
newx = data.matrix(test$rich)
vous voulez nulles les valeurs à tester la valeur de$riche et ensuite d'alimentation de test de données.la matrice. Donc quelque chose comme:
test$rich <- NULL
newx = data.matrix(test)
ridge.pred=predict(ridge.mod,newx=newx)
a travaillé pour moi
Aussi, il ressemble à l'original de votre bloc de données a quelques modèles en fonction de la ligne: lignes après 200 ont
NA
valeurs dansnewAccount
. Vous pourriez vouloir traiter les valeurs manquantes et votre train/test de split avant de votre régressionOriginalL'auteur jimu
J'ai eu le même problème et j'avais la même erreur exact, à la fin de la ci-dessus a fonctionné pour moi, mais j'ai résolu le problème! comme le message d'erreur indique clairement, il y a un "mauvaises dimensions" problème.
Mes données
Dans mon cas, j'ai formé mon
glmnet
ajustement sur les données, avec la dimension de 36 x 895 et mes données de test était de 6 x 6. la raison que j'avais seulement 6 colonnes de mon jeu de données de test est que le lasso de sélection de ces 6 fonctions lorsques="lambda.min"
.Ma solution
J'ai utilisé de la matrice creuse de la Matrice pour créer une matrice (vous pouvez même utiliser la matrice normale):
puis-je remplacer les valeurs que j'avais dans les bonnes colonnes:
maintenant la fonction predict fonctionne très bien.
OriginalL'auteur Mehrad Mahmoudian
J'ai vu cette erreur avant. Le problème dans mon jeu de données a été que le facteur de variables dans ma formation et de jeux de tests ont différents nombre de niveaux. assurez-vous que ce n'est pas le cas.
OriginalL'auteur ekardes
Je poste une réponse, parce que cette question apparaît toujours dans les recherches. Le code ci-dessous fonctionne. J'ai rencontré plusieurs problèmes en essayant de reproduire l'exemple. Il existe des données manquantes dans
bank
; j'ai supprimé ces observations. Aussi, à la génération de prédiction est constante (0.4875) parce que la régression ridge jeux de toutes les variables autres que le terme constant de (presque) zéro (pas étonnant avec une valeur simulée derich
).OriginalL'auteur Robert McDonald
OriginalL'auteur heeseon