【问题标题】:Error in if (any(co)) { : missing value where TRUE/FALSE needed In addition: Warning messages: 1: In FUN(newX[, i], ...) : NAs introduced by coercionif (any(co)) { 中的错误:需要 TRUE/FALSE 的缺失值另外:警告消息:1:在 FUN(newX[,i],...) 中:强制引入的 NA
【发布时间】:2017-12-06 02:56:18
【问题描述】:

我正在处理一个大约有 150000 行和 25 列的数据集。数据由数值变量和因子变量组成。因子变量既是文本又是数字,我需要它们。因变量是一个有 20 个水平的因子。 我正在尝试使用 R 中的 kernlab 包构建模型并将其输入到 SVM 中。

library(kernlab)
n<- nrow(x)
trainInd<- sort(sample(1:nrow(x), n*.8))
xtrain<- x[trainInd,]
xtest<- x[-trainInd,]
ytrain<- y[trainInd]
ytest<- y[-trainInd]
modelclass<- ksvm(x=as.matrix(xtrain), y=as.matrix(ytrain),
              scaled = TRUE, type="C-svc", kernel = "rbfdot",
              kpar="automatic", C=1, cross=0) 

按照代码,我得到这个错误:

Error in if (any(co)) { : missing value where TRUE/FALSE needed
In addition: Warning messages:
1: In FUN(newX[, i], ...) : NAs introduced by coercion

xtrain 数据框如下所示:

Length    Gender    Age    Day    Hour     Duration    Period
  5         1       80      5      11         20          3
 0.2        2       35      2      18         10          5    
 1.1        2       55      1      15         120         4

Gender、Day 和 Period 变量是分类变量(因子),其余变量是数字变量。

我也经历过类似的问题,也经历过我的数据集,但我无法识别任何 NA 值或其他错误。

我假设我在变量类型上做错了什么,特别是因素。我不确定如何使用它们,但我看不出有什么问题。 任何有关如何解决错误以及如何将因子与数值变量一起建模的帮助将不胜感激。

【问题讨论】:

  • 除非您向我们提供整个 x 数据框,或者提供触发错误的可重现示例,否则我们无法为您提供帮助。
  • @ChiPak 感谢您的评论。我添加了一些关于我的数据的详细信息。

标签: r dataframe error-handling na kernlab


【解决方案1】:

我在 R 中使用 e1071 包时遇到了同样的问题。我解决了它,将所有变量更改为 numeric 而不是 factor,除了决策变量 (y),它可以是一个因素(对于分类任务)或数字(用于回归)。

参考资料:

CRAN Package 'e1071'

【讨论】:

    【解决方案2】:

    这个错误信息的原因是kernlab和e1071的svm实现不能处理数据类型因子的特征。

    解决方案是通过 one-hot-encoding 转换作为因子的预测变量。那么有两种情况:

    案例一:公式界面

    one-hot-encoding 是通过使用 train(form = formula, ...) 隐式完成的。

    案例 2:x,y 界面

    当使用train(x = features, y = target, data = dataset, ...) 格式时,您必须明确执行 one-hot-encoding!

    一个简单的方法是: features = model.matrix(features)

    【讨论】:

      猜你喜欢
      • 2016-07-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多