同样是跑随机森林,为啥用单机的R跑和在服务器上用Spark的MLlib结果差好多

首先spark上的RF和单机的RF是有区别的。主要表现在spark上的RF为了减少IO通信对RF做了优化,其中的优化主要有:1 对于连续型特征,一般都是通过排序后进行切割点的划分,但是考虑到对所有数据做排序的IO通信较高,所以只是对每个节点上的数据进行抽样,并根据样本进行切分点的划分,所以这里有一部分的近似。2由于传统的构建决策树方法是递归的形式,这样无形中会造成更多的数据传送,所以在spark中为了能减少这部分的数据传输,一方面采用分层构建,另一方面采用bin也就是feature装箱的方式减少了数据量,这样相当于又做了一部分的近似。所以在算法上来说,spark的RF和单机的是不同的。可以说spark为了能更好的跑大规模数据,牺牲了部分的精确度。其次,你在R上的和spark上的参数是否相同,还有就是你这三万的数据量太小了。
■网友
根本都不是一个算法,spark上的差远了


    推荐阅读