首页 > 解决方案 > 警告“变量不是一个因素”使用预测使用插入符号进行 One-Hot 编码

问题描述

我正在按照本教程学习 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 警告/错误消息如此糟糕和无信息?

标签: rwarningsr-caretone-hot-encoding

解决方案


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

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

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


推荐阅读