Scikit Learn 的 RandomForestRegressor 没有在大型数据集上给出结果

数据挖掘 Python 随机森林 scikit-学习
2022-01-19 17:24:44

我有一个 Pandas 数据框 X(20346, 4116)。所有独立列的二进制变量为 0 或 1。而从属列具有连续变量。当我使用 scikit-learn 库执行以下代码时,它需要永远并且我没有得到任何结果。

X_train, X_test, y_train, y_test = train_test_split(X13, y, train_size=0.8)

rf = RandomForestRegressor(n_estimators=100,  max_features='auto', oob_score=True,
                            n_jobs=1, verbose=0)
rf.fit(X_train, y_train) 

我正在使用它进行功能选择。如果行数较少,我可以获得结果。但是当行数增加时,这个问题就开始发生了。你知道如何让它工作吗?

2个回答

某些设置对您的机器来说可能过于激进:

正如其他人指出的那样,n_jobs利用多核处理器上可能提供的 openMP 线程可能会有所帮助。

但让我们也看看文档中的一些其他参数

RandomForestRegressor(n_estimators=10, criterion='mse', max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features='auto', max_leaf_nodes=None, bootstrap=True, oob_score=False, n_jobs=1, random_state=None, verbose=0, warm_start=False)
  • 为什么不设置n_estimators为 10,然后慢慢增加。
  • max_depth 可能应该同时设置,这样你的树就不会太计算密集,所以你不会过度拟合你的模型(你在交叉验证吗?)
  • 您已设置max_featuresautowhich 指定它使用n_features,但您尚未设置n_features您可以考虑将其降低到您的全部功能集的某个百分比。

通常,您需要交叉验证您的模型并修改参数,以便使用可用内存在有限时间内在您的盒子上运行并充分执行。您还可以考虑调整和交叉验证更简单的决策树,然后使用该洞察力来调整随机森林的参数。

采样数据:

大数据集通常需要大量的计算能力。我有时会在将最佳模型归零时大幅减少训练数据的大小,然后在增加数据集时对缩放进行计时。这将使您更好地了解完整的问题应该花费多少时间。

其他型号:

最后,也许你有一个不适合“引导聚合”的问题。也许另一种类型的聚合会更好地工作,例如“增强”,在这种情况下,“随机丛林”或“ada-boost”算法可能会更好。或者,您可能希望转向一种计算强度较低的方法,该方法不需要像“支持向量回归器”这样的聚合。 Scikit-learn有一个很大的好处是可以非常简单地换出不同的模型并尝试不同的管道。

云计算:

我不确定您在什么机器或笔记本电脑上运行它,但启动 AWS (Google/MS/IBM) 实例并在云中功能强大的机器上运行它可能会更容易。AWS 现货市场在周末或深夜的价格非常实惠,因此您可以在一些非常强大的 8 核机器上工作.50perhour,soa24hourjobisonly12.

希望这可以帮助!

您是否尝试过增加 n_jobs 或将 oob_score 设置为 False?我不确定 sklearn 中默认 max_features 为 auto (=n_features) 的逻辑是什么。使用 sqrt 在随机森林中很常见,应该会提高效率。