随机森林算法4种实现方法对比测试:DolphinDB速度最快,XGBoost表现最差

本文对比了scikit-learn、Spark MLlib、DolphinDB和XGBoost四个平台的随机森林算法实现。测试结果显示,DolphinDB的速度最快,但内存占用较高;XGBoost的内存占用最低,但准确率和性能相对较弱;Python scikit-learn表现均衡;Spark MLlib性能和内存效率较低。
摘要由CSDN通过智能技术生成

随机森林是常用的机器学习算法,既可以用于分类问题,也可用于回归问题。本文对scikit-learn、Spark MLlib、DolphinDB、XGBoost四个平台的随机森林算法实现进行对比测试。评价指标包括内存占用、运行速度和分类准确性。本次测试使用模拟生成的数据作为输入进行二分类训练,并用生成的模型对模拟数据进行预测。

1.测试软件

本次测试使用的各平台版本如下:

scikit-learn:Python 3.7.1,scikit-learn 0.20.2
Spark MLlib:Spark 2.0.2,Hadoop 2.7.2
DolphinDB:0.82
XGBoost:Python package,0.81

2.环境配置

CPU:Intel® Xeon® CPU E5-2650 v4 2.20GHz(共24核48线程)
RAM:512GB
操作系统:CentOS Linux release 7.5.1804
在各平台上进行测试时,都会把数据加载到内存中再进行计算,因此随机森林算法的性能与磁盘无关。

3.数据生成

本次测试使用DolphinDB脚本产生模拟数据,并导出为CSV文件。训练集平均分成两类,每个类别的特征列分别服从两个中心不同,标准差相同,且两两独立的多元正态分布N(0, 1)和N(2/sqrt(20), 1)。训练集中没有空值。

假设训练集的大小为n行p列。本次测试中n的取值为10,000、100,000、1,000,000,p的取值为50。

由于测试集和训练集独立同分布,测试集的大小对模型准确性评估没有显著影响。本次测试对于所有不同大小的训练集都采用1000行的模拟数据作为测试集。
产生模拟数据的DolphinDB脚本见附录1。

4.模型参数

在各个平台中都采用以下参数进行随机森林模型训练:

  • 树的棵数:500
  • 最大深度:分别在4个平台中测试了最大深度为10和30两种情况
  • 划分节点时选取的特征数:总特征数的平方根,即integer(sqrt(50))=7
  • 划分节点时的不纯度(Impurity)指标:基尼指数(Gini index),该参数仅对Python scikit-learn、Spark MLlib和DolphinDB有效
  • 采样的桶数:32,该参数仅对Spark MLlib和DolphinDB有效
  • 并发任务数:CPU线程数,Python scikit-learn、Spark MLlib和DolphinDB取48,XGBoost取24。

在测试XGBoost时,尝试了参数nthread(表示运行时的并发线程数)的不同取值。但当该参数取值为本次测试环境的线程数(48)时,性能并不理想。进一步观察到,在线程数小于10时,性能与取值成正相关。在线程数大于10小于24时,不同取值的性能差异不明显,此后,线程数增加时性能反而下降。该现象在XGBoost社区中也有人讨论过。因此,本次测试在XGBoost中最终使用的线程数为24。

5.测试结果

测试脚本见附录2~5。
当树的数量为500,最大深度为10时,测试结果如下表所示:

\"image\"

当树的数量为500,最大深度为30时,测试结果如下表所示:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值