具有 NaN 值的随机森林

Posted

技术标签:

【中文标题】具有 NaN 值的随机森林【英文标题】:random forest with NaN values 【发布时间】:2017-04-17 15:43:06 【问题描述】:

如果某些预测变量的列中有 NaN 值,我如何使用 randomForest 库在 R 中运行随机森林。

rf <- randomForest(class ~ maxf + minf + d + startf + endf + f1.4 + f1.2 + f3.4 + minslope + maxslope+ bslope + eslope + avgsl + noex + noip, data=whistles_nov, importance=TRUE)

给出这个错误:

Error in na.fail.default(list(class = c(6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L,  : 
missing values in object

matlab 中的 TreeBagger 函数是否与 NaN 值无关?

【问题讨论】:

首先使用 rfImpute 估算 mssing 值 我会使用适当的插补方法(或者如果可以接受,则删除具有 NaN 值的行)来运行它。如果它是一个类变量,您可能只需添加一个新的“缺失”类别。如果您在多个数值列中有大量缺失值,则可能会因为随机森林的工作方式而变得复杂。 【参考方案1】:

您应该“阅读免费手册”(link) 当您键入“?randomForest”时,在 r/rstudio 中也应该可以使用关键字“randomForest”下显示的第 17 页相同的材料。

注意上面写着“na.action”。那里的设置应该驱动它以更理想的方式处理“NA”值。默认值也突出显示,表示“na.fail”。

第 21 页给出的示例之一使用“na.omit”。我怀疑这会省略具有 na 值的行。

您也可以考虑使用缺失值插补将其替换为非 NA 值,但您必须确定这样做是否正确。 (link)

从这个 (link) 看来,MatLab 默认使用“na.omit”的一些有效变体。

【讨论】:

以上是关于具有 NaN 值的随机森林的主要内容,如果未能解决你的问题,请参考以下文章

使用并行训练带有插入符号的随机森林

Scikit-learn - ValueError:输入包含 NaN、无穷大或对于随机森林的 dtype('float32') 来说太大的值

R语言随机森林模型中具有相关特征的变量重要性

[ML]随机森林

Python中每列值的随机森林特征重要性

是否有必要同时运行具有交叉验证的随机森林