首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误- lognet(x,is.sparse,ix,jx,y,weight,offset,alpha,nobs)= etc中的错误

错误- lognet(x,is.sparse,ix,jx,y,weight,offset,alpha,nobs)= etc中的错误
EN

Stack Overflow用户
提问于 2018-01-10 10:27:25
回答 2查看 12.6K关注 0票数 6

在Caret中使用glmnet时出现错误

下面的示例加载库

代码语言:javascript
复制
library(dplyr)
library(caret)
library(C50)

从库C50加载流失数据集

代码语言:javascript
复制
data(churn)

创建x和y变量

代码语言:javascript
复制
churn_x <- subset(churnTest, select= -churn)   
churn_y <- churnTest[[20]]

使用createFolds()在目标变量churn_y上创建5个CV折叠

代码语言:javascript
复制
 myFolds <- createFolds(churn_y, k = 5)

创建trainControl对象: myControl

代码语言:javascript
复制
myControl <- trainControl(
 summaryFunction = twoClassSummary,
 classProbs = TRUE, # IMPORTANT!
 verboseIter = TRUE,
 savePredictions = TRUE,
 index = myFolds
)

适合glmnet模型: model_glmnet

代码语言:javascript
复制
model_glmnet <- train(
  x = churn_x, y = churn_y,
  metric = "ROC",
  method = "glmnet",
  trControl = myControl
)

我收到以下错误

在lognet中出错(x,is.sparse,ix,jx,y,weight,offset,alpha,nobs,:NA/NaN/Inf In外部函数调用(arg 5)另外:警告消息:在lognet中(x,is.sparse,ix,jx,y,weights,offset,alpha,nobs,:NAs由强制引入

我检查过了,churn_x变量中没有缺失值

代码语言:javascript
复制
sum(is.na(churn_x))

有人知道答案吗?

EN

回答 2

Stack Overflow用户

发布于 2018-01-13 00:51:33

问题出在模型规范中。如果使用插入符号训练公式界面,则训练将起作用:

代码语言:javascript
复制
train <- data.frame(churn_x, churn_y)

model_glmnet <- train(churn_y ~ ., data = train,
  metric = "ROC",
  method = "glmnet",
  trControl = myControl
)

> model_glmnet$results
  alpha       lambda       ROC      Sens      Spec      ROCSD     SensSD      SpecSD
1  0.10 0.0001754386 0.6958156 0.2845934 0.9123349 0.01855530 0.01616471 0.004002873
2  0.10 0.0017543858 0.7187303 0.2901986 0.9185721 0.01681286 0.01415863 0.005347573
3  0.10 0.0175438576 0.7399174 0.2355121 0.9487161 0.01482812 0.03932741 0.010769455
4  0.55 0.0001754386 0.6988285 0.2901800 0.9121614 0.01907845 0.01312159 0.004200233
5  0.55 0.0017543858 0.7260286 0.2946617 0.9185714 0.01761485 0.02171189 0.006755247
6  0.55 0.0175438576 0.7630039 0.2008939 0.9617103 0.01743847 0.03989938 0.006118592
7  1.00 0.0001754386 0.7009482 0.2924146 0.9119881 0.01958200 0.01233419 0.004157393
8  1.00 0.0017543858 0.7313495 0.2957728 0.9203040 0.01797853 0.02356945 0.008478577
9  1.00 0.0175438576 0.7672690 0.1595779 0.9760892 0.01935176 0.01935583 0.007938801

然而,当你指定xy时,它将不起作用,因为glmnet以模型矩阵的形式接受x,当你提供插入符号的公式时,它将负责model.matrix的创建,但如果你只指定xy,那么它将假设x是一个model.matrix,并将其传递给glmnet。例如,它是这样工作的:

代码语言:javascript
复制
x <- model.matrix(churn_y ~ ., data = train)

model_glmnet2 <- train(x = x, y = churn_y,
                      metric = "ROC",
                      method = "glmnet",
                      trControl = myControl
)
> model_glmnet2$results
  alpha       lambda       ROC      Sens      Spec      ROCSD     SensSD      SpecSD
1  0.10 0.0001754386 0.6958156 0.2845934 0.9123349 0.01855530 0.01616471 0.004002873
2  0.10 0.0017543858 0.7187303 0.2901986 0.9185721 0.01681286 0.01415863 0.005347573
3  0.10 0.0175438576 0.7399174 0.2355121 0.9487161 0.01482812 0.03932741 0.010769455
4  0.55 0.0001754386 0.6988285 0.2901800 0.9121614 0.01907845 0.01312159 0.004200233
5  0.55 0.0017543858 0.7260286 0.2946617 0.9185714 0.01761485 0.02171189 0.006755247
6  0.55 0.0175438576 0.7630039 0.2008939 0.9617103 0.01743847 0.03989938 0.006118592
7  1.00 0.0001754386 0.7009482 0.2924146 0.9119881 0.01958200 0.01233419 0.004157393
8  1.00 0.0017543858 0.7313495 0.2957728 0.9203040 0.01797853 0.02356945 0.008478577
9  1.00 0.0175438576 0.7672690 0.1595779 0.9760892 0.01935176 0.01935583 0.007938801

仅当存在因子要素时才需要model.matrix

票数 7
EN

Stack Overflow用户

发布于 2020-04-15 18:05:05

如果您想使用glmnet并得到相同的错误,请执行此操作!

简短回答:使用data.matrix()解决了我的问题!

最初,我是这样做的:

代码语言:javascript
复制
# Given X and Y are datframes
cv.glmnet(x = as.matrix(X), y = as.matrix(Y), alpha = 1, family = "binomial")

这是通过以下方式修复的:

代码语言:javascript
复制
cv.glmnet(x = data.matrix(X), y = as.matrix(Y), alpha = 1, family = "binomial")

long答案(一点也不长):

我遇到了同样的问题,我使用as.matrix()传递X矩阵,它将数据框中的所有元素转换为所有列的强制类型,如果您的数据框中碰巧有因子,as.matrix()会将所有内容转换为字符。使用data.matrix()为我解决了这个问题。在as.matrix更基本的地方,data.matrix()可以处理因子和有序因子。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48179423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档