在 R 中使用 randomforest() 进行分类?
Posted
技术标签:
【中文标题】在 R 中使用 randomforest() 进行分类?【英文标题】:Use of randomforest() for classification in R? 【发布时间】:2013-10-18 12:34:36 【问题描述】:我最初有一个由 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?
如果有人能指出我所犯的格式错误,我将不胜感激。
谢谢!
【问题讨论】:
您正在尝试使用<=
而不是 <-
进行分配。你也在创建一个新列吗?如果是这样,您应该摆脱 Class
的数字版本,或者不要在公式中使用 .
唯一能解决这个问题的信息是str(training)
的输出。
不要在 cmets 中放入类似的东西。如您所见,它不适合。编辑您的问题并正确格式化。
trainData
和training
一样吗?
第二个错误(我认为它只是一个警告)正在出现,因为trainData
中的Class
是numeric
,但唯一值少于5 个。因为它是numeric
randomForest
正在尝试回归,但你想要分类所以你需要Class
作为一个因素,如果你修复第一个错误并且trainData
只是training
的副本
【参考方案1】:
所以问题其实很简单。原来我的训练数据是一个原子向量。所以首先必须将其转换为数据框。所以我需要添加以下行:
training <- as.data.frame(training)
问题解决了!
【讨论】:
【参考方案2】:首先,由于语法错误,您对因子的强制不起作用。其次,在指定 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)
【讨论】:
这并没有解决我的问题,它仍然在问我是否要进行回归... 添加刚刚发布的行后,我最终使用了这种语法。以上是关于在 R 中使用 randomforest() 进行分类?的主要内容,如果未能解决你的问题,请参考以下文章