随机森林算法实现的性能对比测试

文章提供标题、作者与发布日期信息。

Source: https://dolphindb.cn/blogs/49

What this page covers

技能认证特训营第二期正式开启(限时报名)

页面顶部包含活动/培训营报名提示与报名链接。

随机森林算法实现的性能对比测试

给出文章标题、作者与发布日期信息。

对比测试概述与评价指标

说明随机森林的用途、对比的平台、评价指标,以及数据与任务设置(模拟二分类训练与预测)。

测试软件(平台版本)

列出参与对比测试的软件平台与版本信息。

环境配置(硬件与操作系统)

给出CPU、内存、操作系统,并说明测试将数据载入内存、与磁盘无关。

数据生成(模拟数据与数据规模)

描述模拟数据的生成方式、分布假设、训练/测试集规模设置与脚本位置。

模型参数(各平台统一设置与xgboost线程说明)

列出随机森林训练参数,并解释xgboost在不同nthread下的性能现象与最终取值。

测试结果(深度10与深度30)

给出两组(最大深度10/30)对比结果表(以图片形式)并配有说明性文字。

结果分析(准确率、性能、CPU与内存占用)

对四个平台的准确率、训练性能、CPU利用率与内存占用进行对比,并给出DolphinDB numJobs参数与xgboost实现差异解释。

总结

概括各平台实现的总体表现与适用场景,并强调DolphinDB与数据库的无缝集成及numJobs权衡能力。

附录(数据生成与各平台脚本/代码)

提供模拟数据生成脚本以及 scikit-learn、Spark MLlib、DolphinDB、xgboost 的训练与预测脚本/代码。

Facts index

Entity Attribute Value Confidence
技能认证特训营第二期报名链接https://www.qingsuyun.com/h5/e/217471/5/high
随机森林算法实现的性能对比测试发布日期2021-08-05high
随机森林算法实现的性能对比测试作者署名Junxihigh
随机森林用途既可用于分类问题,也可用于回归问题high
对比测试平台包含的平台scikit-learn、Spark MLlib、DolphinDB、xgboosthigh
对比测试评价指标内存占用、运行速度、分类准确性high
本次测试任务训练与预测任务描述使用模拟生成数据作为输入进行二分类训练,并用生成的模型对模拟数据进行预测high
测试软件版本scikit-learn版本Python 3.7.1,scikit-learn 0.20.2high
测试软件版本Spark MLlib版本Spark 2.0.2,Hadoop 2.7.2high
测试软件版本DolphinDB版本0.82high
测试软件版本xgboost版本Python package,0.81high
测试硬件CPU型号与规格Intel(R) Xeon(R) CPU E5-2650 v4 2.20GHz(共24核48线程)high
测试硬件内存容量512GBhigh
测试环境操作系统CentOS Linux release 7.5.1804high
测试方法数据加载方式在各平台上进行测试时,都会把数据加载到内存中再进行计算high
测试方法与磁盘关系随机森林算法的性能与磁盘无关high
数据生成生成方式与导出格式使用DolphinDB脚本产生模拟数据,并导出为CSV文件high
训练集类别设置类别分布训练集平均分成两类high
特征分布假设每类特征列分布两类分别服从中心不同、标准差相同且两两独立的多元正态分布 N(0, 1) 和 N(2/sqrt(20), 1)high
训练集数据质量是否含空值训练集中没有空值high
训练集规模n取值10,000;100,000;1,000,000high
训练集规模p取值50high
测试集规模选择依据对准确性评估影响由于测试集和训练集独立同分布,测试集的大小对模型准确性评估没有显著影响medium
测试集规模测试集行数1000行high
随机森林训练参数(通用)树的棵数500high
随机森林训练参数(通用)最大深度测试值10 和 30high
随机森林训练参数(通用)划分节点时选取的特征数总特征数的平方根;integer(sqrt(50))=7high
随机森林训练参数(部分平台)Impurity指标基尼指数(Gini index),仅对Python scikit-learn、Spark MLlib和DolphinDB有效high
随机森林训练参数(部分平台)采样的桶数(maxBins)32,仅对Spark MLlib和DolphinDB有效high
并发任务数设置各平台并发线程数Python scikit-learn、Spark MLlib、DolphinDB取48;xgboost取24high
xgboost nthread参数观察nthread=48时性能表现当nthread取48时,性能并不理想medium
xgboost线程数与性能关系线程数<10时性能与取值成正相关medium
xgboost线程数与性能关系10<线程数<24时不同取值的性能差异不明显medium
xgboost线程数与性能关系线程数继续增加时线程数增加时性能反而下降medium
xgboost社区讨论链接参考链接https://link.zhihu.com/?target=https%3A//github.com/dmlc/xgboost/issues/1511high
xgboost测试设置最终使用线程数24high
测试脚本附录位置测试脚本见附录2~5high
测试结果(深度10)条件树的数量为500,最大深度为10high
测试结果(深度30)条件树的数量为500,最大深度为30high
结果对比(准确率)各平台准确率关系Python scikit-learn、Spark MLlib和DolphinDB的准确率比较相近,略高于xgboostmedium
结果对比(性能)性能排序(高到低)DolphinDB、Python scikit-learn、xgboost、Spark MLlibmedium
Python scikit-learn实现CPU核使用情况使用了所有CPU核medium
Spark MLlib实现CPU利用率与数据量(10,000行)CPU峰值占用率约8%medium
Spark MLlib实现CPU利用率与数据量(100,000行)CPU峰值占用率约25%medium
Spark MLlib实现在1,000,000行时的运行情况会因为内存不足而中断执行high
DolphinDB实现CPU核使用情况使用了所有CPU核medium
DolphinDB实现速度结论是所有实现中速度最快的medium
DolphinDB实现内存占用相对scikit-learn内存占用是scikit-learn的2-7倍medium
DolphinDB实现内存占用相对xgboost内存占用是xgboost的3-9倍medium
DolphinDB随机森林实现参数numJobs用途可通过调整numJobs降低并行度,从而减少内存占用high
DolphinDB随机森林(文档参考)用户手册链接https://link.zhihu.com/?target=https%3A//www.dolphindb.cn/cn/help/randomForestClassifier.htmlhigh
xgboost随机森林与boosted trees关系xgboost常用于boosted trees训练,也能进行随机森林;随机森林是算法迭代次数为1时的特例medium
xgboost性能(线程数)最佳线程数范围在24线程左右时性能最高medium
xgboost实现内存优势内存占用最少medium
xgboost实现差异bootstrap过程没有bootstrap这一过程medium
xgboost实现差异抽样方式对数据使用无放回抽样而不是有放回抽样medium
xgboost准确率解释准确率略低原因由于实现差异(如无bootstrap、无放回抽样),可以解释其准确率略低于其它平台low
总结:Python scikit-learn实现总体评价在性能、内存开销和准确率上的表现比较均衡medium
总结:Spark MLlib实现总体评价在性能和内存开销上的表现远远不如其他平台medium
总结:DolphinDB实现总体评价性能最优medium
DolphinDB随机森林与数据库集成方式随机森林算法和数据库无缝集成;用户可直接对数据库中的数据进行训练和预测medium
DolphinDB随机森林实现numJobs作用(权衡)提供numJobs参数,实现内存和速度之间的平衡medium
总结:xgboost随机森林适用场景最佳应用场景为boosted treemedium
附录1内容模拟生成数据的DolphinDB脚本high
附录2内容Python scikit-learn的训练和预测脚本high
附录3内容Spark MLlib的训练和预测代码(Scala实现)high
附录4内容DolphinDB的训练和预测脚本high
附录5内容xgboost的训练和预测脚本high