10

我最初有一个由 N 行中的 12 列组成的数据框。最后一列是我的班级(0 或 1)。我不得不将我的整个数据框转换为数字

training <- sapply(training.temp,as.numeric)

但是后来我认为我需要将类列作为因子列才能使用 randomforest() 工具作为分类器,所以我做了

training[,"Class"] <- factor(training[,ncol(training)])

我继续创建树

training_rf <- randomForest(Class ~., data = trainData, importance = TRUE, do.trace = 100)

但我遇到两个错误:

1: In Ops.factor(training[, "Status"], factor(training[, ncol(training)])) : 
<= this is not relevant for factors (roughly translated)
2: In randomForest.default(m, y, ...) :
The response has five or fewer unique values.  Are you sure you want to do regression?

如果有人能指出我所犯的格式错误,我将不胜感激。

谢谢!

4

2 回答 2

8

所以这个问题其实很简单。原来我的训练数据是一个原子向量。所以首先必须将其转换为数据框。所以我需要添加以下行:

training <- as.data.frame(training)

问题解决了!

于 2013-10-11T09:14:39.377 回答
6

首先,由于语法错误,您对因子的强制不起作用。其次,在指定 RF 模型时应始终使用索引。以下是您的代码中应该使其正常工作的更改。

    training <- sapply(training.temp,as.numeric)
      training[,"Class"] <- as.factor(training[,"Class"])

    training_rf <- randomForest(x=training[,1:(ncol(training)-1)], y=training[,"Class"], 
                                importance=TRUE, do.trace=100)

# You can also coerce to a factor directly in the model statement
    training_rf <- randomForest(x=training[,1:(ncol(training)-1)], y=as.factor(training[,"Class"]), 
                                importance=TRUE, do.trace=100)
于 2013-10-10T18:14:05.347 回答