我想获得比 Weka 更快的随机森林分类器,我首先尝试了 C++ Shark 实现(结果:速度提升很少,正确分类的实例下降),然后测试了 Python Scikit-learn。我在许多网站和论文中读到,与 Scikit、WiseRF 相比,Weka 表现不佳……
在我第一次尝试 100 棵树的森林之后:
Training time: Weka ~ 170s VS Scikit ~ 31s
Prediction results on the same test set: Weka ~ 90% correctly classified VS Scikit score ~ 45% !!!
=> Scikit RF 运行速度很快,但在第一次尝试时分类非常糟糕。
我调整了 Scikit RandomForestClassifier 的参数并设法获得接近 70% 的分数,但 scikit 的速度几乎下降到 Weka 性能(bootstrap=False,min_samples_leaf=3,min_samples_split=1,criterion='entropy',max_features=40 , max_depth=6)。我确实有很多缺失值,而 scikit 没有立即处理它们,所以我尝试了许多不同的策略(Imputer 的所有策略,跳过缺失值的实例,替换为 0 或极值)并达到了 75%。
因此,在这个阶段,Scikit RandomForestClassifier 的性能为 75%(相比之下使用 weka 为 90%)并在 78 秒内构建模型(使用 6 个核心 vs 170s,使用 Weka 仅使用 1 个核心)。我对这些结果感到非常惊讶。我测试了 ExtraTrees,它在速度方面表现非常好,但仍能达到平均 75% 的正确分类率。
你知道我错过了什么吗?
我的数据:~100 个特征、~100 000 个实例、缺失值、分类预测(价格预测)。
最佳答案
在评论中结束讨论,使 StackOverflow 将此问题标记为已回答:
显然,OP 能够通过删除具有缺失值的样本和使用 GridSearchCV
网格搜索最佳超参数值来达到可比的准确性。
在这种情况下,单热编码分类特征显然对结果没有太大影响。
关于weka - 随机森林分类 - SciKit 与 Weka 对 100 个特征的预测,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20658519/