randomForest-数据值等于拆分值时逻辑比较失败

randomForest-数据值等于拆分值时逻辑比较失败,r,random-forest,R,Random Forest,我一直在做一个项目,需要从一个随机的森林中挖掘出每棵树的预测。我有一个randomForest对象,我对新数据使用了predict方法来创建包含单个树预测以及整个森林预测的对象 我发现,在某些情况下,定义拆分的值与数据的值相同。在这种情况下,算法应该选择左子代继续,但在这些情况下,它选择的是右子代。换言之,数据_值的测试您确定这不仅仅是不理解浮点比较的情况吗?可能是。你能详细说明一下吗?这是令人不安的,因为在某些情况下,相互竞争的最终预测是相反的…一条路径产生0,另一条路径产生1。很难在我的手机

我一直在做一个项目,需要从一个随机的森林中挖掘出每棵树的预测。我有一个randomForest对象,我对新数据使用了predict方法来创建包含单个树预测以及整个森林预测的对象


我发现,在某些情况下,定义拆分的值与数据的值相同。在这种情况下,算法应该选择左子代继续,但在这些情况下,它选择的是右子代。换言之,数据_值的测试您确定这不仅仅是不理解浮点比较的情况吗?可能是。你能详细说明一下吗?这是令人不安的,因为在某些情况下,相互竞争的最终预测是相反的…一条路径产生0,另一条路径产生1。很难在我的手机上详细说明。但您似乎只是假设,因为控制台上打印了5.53,所以基础值正好是5.53,与其相信一个使用良好的数值软件的作者没有弄乱简单的数字比较。好吧,但导出到pmml包含精确的5.53,因此使用pmml在R之外进行预测将是不正确的。那么也许你发现的是pmml导出器中的一个错误。但至少要努力验证分割值不完全是5.53。ie选项(数字=)
# rf2 is a RandomForest object
# get the 56th tree out of the RandomForest
> t56 <- getTree(rf2,k=56,labelVar=T)

# find the value of the split point for node 448
> t56[448,"split point"]
[1] 5.53

> t56[448,"split point"] == 5.53
[1] FALSE

> t56[448,"split point"] >5.53
[1] FALSE

> t56[448,"split point"] <5.53
[1] TRUE

> t56[448,"split point"] <5.529999999999999
[1] FALSE

> t56[448,"split point"] <5.5299999999999999
[1] TRUE

# value of the data used to make the split
> dat[,"V1"]
[1] 5.53

> dat[,"V1"]<= t56[448,"split point"]
[1] FALSE
 > options(digits=15)
 > t56[448,"split point"] 
 [1] 5.53