【发布时间】:2013-06-29 12:18:05
【问题描述】:
我正在尝试使用 R 编程语言版本 2.13.1 的 randomForest 包版本 4.6-7 检索二类分类问题的类原型。为此,我调用了classCenter 函数。问题是它有时会输出无效结果,即返回的类原型中的一个或两个完全由NA 值组成。发生这种情况时,我会在 R 控制台中得到以下信息:
There were 50 or more warnings (use warnings() to see the first 50)
键入warnings() 会给出以下 50 次:
1: In mean.default(sort(x, partial = half + 0L:1L)[half + ... :
argument is not numeric or logical: returning NA
重要提示:我注意到该函数为在相同数据上学习并使用相同设置的不同随机森林模型提供了不同的输出,即它可能会为一个返回两个类原型,但对于另一个模型则没有。这意味着至少有时我会得到有效的结果。
我在 R 控制台中使用此代码:
library(randomForest)
mydata <- read.csv("mydata.csv", header=TRUE)
myrf <- randomForest(x=mydata[,-1:-2], y=mydata[,1], ntree=1000, mtry=33, importance=TRUE, proximity=TRUE)
mycc <- classCenter(mydata[,-1:-2], mydata[,1], myrf$prox)
print(mycc)
CSV 文件的第一列包含类标签,第二列被忽略。有 5,000 个正类示例和 5,000 个负类示例,均具有 135 个特征/变量,没有缺失值(见下文)。
我在 stackoverflow 和 google 上搜索过这个问题的解决方案,但无济于事。 randomForest 包的 documentation 没有指定“all-NAs”返回值。我不得不说我不熟悉 R 并且使用文档和直觉破解了这段代码。
编辑:mydata[!complete.cases(mydata),] 为空,即输入数据中没有缺失 (NA) 值。 summary(mydata) 和 mydata[1:10,] 的输出可以在 here 中找到(您可能希望在文本编辑器中查看文件而不使用自动换行,因为文本的格式是宽的)。前 10 行当然不足以重现错误,但我不允许发布整个数据集。
【问题讨论】:
-
您能否提供您使用的数据子集,用于重现错误?否则很难诊断。
summary(mydata)的输出也很方便,因为我认为这就是问题所在。 -
编辑:您可以找到
summary(mydata)和mydata[1:10,]here 的输出(您可能希望在没有自动换行的文本编辑器中查看文件,因为文本的格式是宽的)。当然,前 10 行不足以重现错误,但我不允许发布整个数据集。对于某些模型,如何拥有一个由 NA 组成的类原型,而对于其他模型则不是?如何确定我的某些值是否不是数字或逻辑?mydata[!complete.cases(mydata),]为空。 -
数据看起来不错,我只是想仔细检查一下。一个长远的想法是,您的数据框中可能隐藏了一些奇怪的属性或结构,从而使事情变得混乱。尝试将其转换为数字矩阵,以删除除原始数字和维度之外的所有内容。
标签: r random-forest na