【问题标题】:R: Number of classes is not equal to 2R:类数不等于2
【发布时间】:2018-03-19 00:02:59
【问题描述】:

我在尝试为通过嘎嘎声运行的随机森林模型生成提升图时遇到以下错误:

预测错误(crs$pr, no.miss): 类数不等于 2。 ROCR 目前只支持二分类任务的评估。

我的代码如下: # 评估模型性能。

# Lift Chart: requires the ROCR package.

library(ROCR)

# Obtain predictions for the rf model on TBA_jul21c.csv [**train**].

crs$pr <- predict(crs$rf, newdata=na.omit(crs$dataset[crs$sample,    c(crs$input, crs$target)]), type="prob")[,2]

# Remove observations with missing target.

no.miss   <- na.omit(na.omit(crs$dataset[crs$sample, c(crs$input,   crs$target)])$targetvar)
miss.list <- attr(no.miss, "na.action")
attributes(no.miss) <- NULL

if (length(miss.list))
{
 pred <- prediction(crs$pr[-miss.list], no.miss)
} else
{
  pred <- prediction(crs$pr, no.miss)
}

# Convert rate of positive predictions to percentage.

per <- performance(pred, "lift", "rpp")
per@x.values[[1]] <- per@x.values[[1]]*100

# Plot the lift chart.
plot(per, col="#CC0000FF", lty=1, xlab="Caseload (%)", add=FALSE)

我的数据集有 127 个变量,包括一个带有 Y/N 标签的目标变量。我正在按如下方式读取数据集:

crs$dataset <- read.csv("file:///C:/MastersC/TBA_jul21c.csv",    na.strings=c(".", "NA", "", "?"), strip.white=TRUE, encoding="UTF-8")

#============================================================
# Rattle timestamp: 2015-07-22 08:36:53 x86_64-w64-mingw32 

# Note the user selections. 

# Build the training/validate/test datasets.

set.seed(crv$seed) 
crs$nobs <- nrow(crs$dataset) # 72824 observations 
crs$sample <- crs$train <- sample(nrow(crs$dataset), 0.7*crs$nobs) # 50976   observations
crs$validate <- sample(setdiff(seq_len(nrow(crs$dataset)), crs$train),   0.15*crs$nobs) # 10923 observations
crs$test <- setdiff(setdiff(seq_len(nrow(crs$dataset)), crs$train),     crs$validate) # 10925 observations

我认为它与目标变量有关,但我不确定。任何帮助将不胜感激,因为我已经坚持了几个小时。到此为止,这是我的第一个 stackoverflow 帖子,所以如果我没有正确发布,请随时责备我。 非常感谢

【问题讨论】:

  • 你能把你的问题提炼成一个可重复的例子吗?
  • 您的假设应该是正确的:您的目标变量中有多少不同的值?我假设实际上有超过 2 个(可能是“丢失”或其他内容的文本?
  • 是的,只有两个不同的值“Y”和“N”——这使得错误消息难以理解
  • Roman,您在寻找什么有助于提炼问题?
  • 更新:我刚刚弄明白了。我的数据集中有太多缺失值,以至于他们几乎擦除了所有记录以进行评估。

标签: r


【解决方案1】:

Predobject 将使用 2 个预测函数的输入来创建:

  1. 预测列表(向量)(模型输出、赔率或 每个成员的概率),
  2. 标签列表(向量):0 或 1

如下图:

library(ROCR)
data(ROCR.simple)
pred <- prediction( ROCR.simple$predictions, ROCR.simple$labels)

在问题的情况下,第二个参数(上述问题中的 no.miss)很可能不是二进制信息列表(0,1)。

如果您收到此错误,请检查您的第二个参数。我有同样的错误并提供正确的信息解决了它。

【讨论】:

    猜你喜欢
    • 2015-01-16
    • 1970-01-01
    • 1970-01-01
    • 2017-11-06
    • 1970-01-01
    • 2018-10-30
    • 2016-10-31
    • 2016-10-06
    • 2014-07-04
    相关资源
    最近更新 更多