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

理由
举报 取消

原数据只是抽出来的一个3万来条的样本,大约60%为0,40%为1。单机用的是R下的randomForest包,准确率能有85%,这个结果还是蛮可靠的。但是同样的数据,放到服务器上用Spark的MLlib跑,准确率只有60%左右,混淆矩阵也看不出问题。分类型变量也用categoricalFeaturesInfo命令注明了,这是怎么回事呢?

2017年8月5日 2 条回复 830 次浏览

发起人:老胡 初入职场

回复 ( 2 )

  1. 杨羊羊
    理由
    举报 取消

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

  2. 匿名用户
    理由
    举报 取消

    根本都不是一个算法,spark上的差远了

我来回答

Captcha 点击图片更换验证码