【问题标题】:Cross-validation for logistic regression逻辑回归的交叉验证
【发布时间】:2020-04-14 22:25:40
【问题描述】:

我在 R 中对逻辑回归进行 10 倍交叉验证时遇到了一些问题。

我使用了cv.glm() 函数,但它显示错误。但是,我将此函数用于 ISLR 包中的 Smarket 数据,它没有显示任何错误。我的逻辑回归中的预测变量是二元的。

# 10-Fold Cross-Validation for Logistic Regression
cv.errorlog7 <- cv.glm(p, logit7, K=10)$delta[1] 

我收到以下错误消息:

Error in model.frame.default(Terms, newdata, na.action = na.action, xlev = object$xlevels) : 
  factor gender has new levels Other
In addition: Warning messages:
1: In predict.lm(object, newdata, se.fit, scale = 1, type = if (type ==  :
  prediction from a rank-deficient fit may be misleading
2: In predict.lm(object, newdata, se.fit, scale = 1, type = if (type ==  :
  prediction from a rank-deficient fit may be misleading
3: In y - yhat :
  longer object length is not a multiple of shorter object length

【问题讨论】:

  • 您的数据集有多大?如果您在性别中没有任何 NA 或第三个因素,那么听起来您的一个折叠随机选择了一个性别。我会尝试使用新种子进行交叉验证或减少折叠次数。如果你能提供一个代表,那将非常有帮助。
  • 谢谢。我有 143 个科目和 18 个变量。数据不包含任何 NA,我没有使用性别来拟合我的逻辑回归。我尝试过更改种子,但遇到了同样的错误。

标签: r


【解决方案1】:

我遇到了一个非常相似的错误:

> set.seed(100)
> cv.lm(data = catering1, form.lm = model, m=3) # 3 fold cross-validation
Error in model.frame.default(Terms, newdata, na.action = na.action, xlev = object$xlevels) : 
  factor Month has new levels July
# Reset seed
> set.seed(1000)
> cv.lm(data = catering1, form.lm = model, m=3) # 3 fold cross-validation
Error in model.frame.default(Terms, newdata, na.action = na.action, xlev = object$xlevels) : 
  factor Month has new levels July

如您所见,我什至重置了种子并再次尝试。没运气。但是,当我将折叠次数(我一直增加 1 直到我得到响应)增加到 5 时,代码起作用了。但是我确实收到了错误和警告。

> cv.lm(data = catering, form.lm = model, m=5) # 5 fold cross-validation
Response.... Anova table....
Error in which.min(xval) : 
  'list' object cannot be coerced to type 'double'
In addition: Warning message:
In cv.lm(data = catering, form.lm = model, m = 5) : 

 As there is >1 explanatory variable, cross-validation
 predicted values for a fold are not a linear function
 of corresponding overall predicted values.  Lines that
 are shown for the different folds are approximate

所以,我会尝试增加褶皱。尤其是由于您的数据集相对较小,因此不会对性能产生太大影响。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-02
    • 2017-01-25
    • 2019-04-20
    • 2017-07-07
    • 2016-11-20
    • 2020-09-27
    • 2016-09-30
    • 2016-06-27
    相关资源
    最近更新 更多