【问题标题】:Warning "Variable is not a factor" using predict for One-Hot encoding using caret警告“变量不是一个因素”使用预测使用插入符号进行 One-Hot 编码
【发布时间】:2019-03-01 18:31:08
【问题描述】:

我正在关注this tutorial,以了解 R 和机器学习中插入符号包的基础知识。

我收到一条我不理解的警告消息,我不知道这是否有问题。当我将教程步骤应用于我自己的数据以及按照教程进行操作时,都会发生这种情况。

orange <- read.csv('https://raw.githubusercontent.com/selva86/datasets/master/orange_juice_withmissing.csv')
trainRowNumbers <- createDataPartition(orange$Purchase, p=0.8, list=FALSE)

# Step 2: Create the training  dataset
trainData <- orange[trainRowNumbers,]

# Step 3: Create the test dataset
testData <- orange[-trainRowNumbers,]

#Impute
preProcess_missingdata_model <- preProcess(trainData, method='knnImpute')
preProcess_missingdata_model
library(RANN)  # required for knnInpute
trainData <- predict(preProcess_missingdata_model, newdata = trainData)

#One-hot encoding
dummies_model <- dummyVars(Purchase ~ ., data=trainData)
trainData_mat <- predict(dummies_model, newdata = trainData)    

我得到: 警告信息: 在 model.frame.default(Terms, newdata, na.action = na.action, xlev = object$lvls) 中: 变量“购买”不是一个因素

但是:

is.factor(trainData$Purchase)
[1] TRUE

我有两个问题:

  1. 这是怎么回事?
  2. 这很重要吗?
  3. (额外加分)为什么 R 警告/错误消息如此糟糕且缺乏信息?

【问题讨论】:

  • 看一眼就不清楚了。如果您想深入了解源代码,请尝试 print(caret:::predict.dummyVars) 然后 print(model.frame.default) 或在 Rstudio 中 View(caret:::predict.dummyVars) 然后 View(model.frame.default)
  • 我遇到了同样的问题,但是当我打电话给 print(class(df$column_name)) 时,我得到了“因素”,奇怪的行为,我在查看 View(model.frame.defualt) 时似乎不明白为什么

标签: r warnings r-caret one-hot-encoding


【解决方案1】:

您可以通过删除 ~ 之前的标签轻松修复它。

在这种情况下,您的代码如下所示:

#One-hot encoding
dummies_model <- dummyVars(~ ., data=trainData)
trainData_mat <- predict(dummies_model, newdata = trainData)

【讨论】:

    【解决方案2】:

    我刚刚发现了这个问题,因为我在教程中遇到了同样的问题。最后,我对本教程的解决方案是这样做:

    dummies_model <- dummyVars(~ ., data = trainData[, names(trainData) != "Purchase"])
    

    这样您就排除了purchase 列,否则该列也会被拆分为虚拟变量。使用我的解决方案,您可以继续学习教程而不会收到任何警告。

    【讨论】:

      猜你喜欢
      • 2020-06-23
      • 1970-01-01
      • 2019-07-14
      • 2021-04-22
      • 2020-09-18
      • 1970-01-01
      • 2019-09-13
      • 2019-08-13
      • 2023-04-08
      相关资源
      最近更新 更多