【问题标题】:Train error with lm model: Unused arguments使用 lm 模型训练错误:未使用的参数
【发布时间】:2021-09-19 15:37:49
【问题描述】:

我正在尝试创建一个多元线性回归模型,因为我需要预测一个系列中旅行者的数量。应用 train 函数时出现以下错误::

"火车出错(Viajeros ~ ., data = frm, method = "lm", trControl = trainControl) : 未使用的参数 (data = frm, method = "lm", trControl = trainControl)"。

代码为:

# Regresión lineal múltiple
trainControl <- trainControl(
                             method="cv", 
                             number=3, 
                             classProbs=TRUE,
                             summaryFunction=twoClassSummary
                           )
frm <- as.formula(paste("Viajeros ~ ", paste(relevant_features, collapse="+")))

set.seed(7)
fit <- train( 
             Viajeros~., 
             data = frm, 
             method="lm", 
             trControl=trainControl
            )

数据分布如下:

我不知道出了什么问题,但它不会让我应用任何类型的模型。我总是遇到同样的错误。

【问题讨论】:

  • 或许也可以尝试指定您正在使用的软件包。
  • train() 来自 caret 包。 @Marta López Gómez:创建一个小的可重复示例总是好的,其中包括库和一些数据。

标签: r model linear-regression prediction training-data


【解决方案1】:

您必须在插入符号中使用 glm 而不是 lm 才能使其适用于二进制分类。然后你可以使用这样的公式和数据框:

library(caret)
#> Loading required package: lattice
#> Loading required package: ggplot2
library(tidyverse)

data <- iris %>% mutate(is_setosa = ifelse(Species == "setosa", "setosa", "other") %>% factor())

trainControl <- trainControl(
  method="cv", 
  number=3, 
  classProbs=TRUE,
  summaryFunction=twoClassSummary
)

frm <- is_setosa ~ Sepal.Length + Petal.Length

set.seed(7)
fit <- train( 
  form = frm,
  data = data,
  method="glm", 
  trControl=trainControl
)
#> Warning in train.default(x, y, weights = w, ...): The metric "Accuracy" was not
#> in the result set. ROC will be used instead.
#> Warning: glm.fit: algorithm did not converge
#> Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
#> Warning: glm.fit: algorithm did not converge
#> Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
#> Warning: glm.fit: algorithm did not converge
#> Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
#> Warning: glm.fit: algorithm did not converge
#> Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred

reprex package (v2.0.1) 于 2021-09-19 创建

【讨论】:

    【解决方案2】:

    您需要正确指定formuladata 参数(公式不应该是data.frame,而是公式,反之亦然)。

    library(caret)
    
    # Regresión lineal múltiple
    trainControl <- trainControl(
      method="cv", 
      number=3, 
      classProbs=TRUE,
      #summaryFunction=twoClassSummary # does not work with lm
    )
    
    frm <- as.formula(paste("Viajeros ~ ", paste(relevant_features, collapse="+")))
    
    set.seed(7)
    fit <- train( 
      form = frm, 
      data = data, 
      method="lm", 
      trControl=trainControl
    )
    

    【讨论】:

    • 插入符号lm 不允许使用twoClassSummary。请运行您的代码,例如使用包reprex 确保它是正确的。
    • 刚刚修复它,但你的答案更完整,实际数据,只是赞成它。我只是懒得在答案中创建一个最小的可重现示例..
    猜你喜欢
    • 2022-06-26
    • 2017-08-19
    • 1970-01-01
    • 2018-03-05
    • 1970-01-01
    • 2017-02-10
    • 2018-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多