来自 scikit-garden .fit 方法的 RandomForestQuantileRegressor 在训练最后一棵树时冻结

RandomForestQuantileRegressor from scikit-garden .fit method freezes when training last tree

我已经使用 scikit-garden 工作了大约 2 个月,尝试训练分位数回归森林 (QRF),类似于 this paper 中的方法。该论文的作者使用了 R,但由于我和我的同事已经熟悉 python,我们决定使用 scikit-garden 中的 QRF 实现。首先,这个包的形状很糟糕,而且似乎没有完全发挥作用(我们不得不更改一些源代码才能首先获得它 运行ning)。这是我让它工作的最后一次尝试。

完成所有负责创建可行数据集的代码后,我们现在正尝试使用标准超参数训练一个简单的 QRF,以获得对误差的初步估计。直到现在,还没有一个训练 运行 完成,因为它似乎总是在训练最后一棵树时停滞/冻结,我总是不得不自己终止这项工作以避免惹恼系统管理员。

例如,我最近的训练 运行 我进行了 8 CPU 秒(每个 CPU 训练 1 棵树),标准设置构建并训练 10 棵树。所有树都在 5-6 分钟内完成构建和训练,除了最后一棵树,我让 运行 待了一个星期才被迫杀死它。重要的是,保留的 8 个 CPU 中只有一个处于活动状态,并且(显然)运行 处于 100%。

我们有相当大的数据集(约 2'000'000 个观察值),但即使有较小的摘录,它仍然冻结在最后一棵树上。除了最后一个之外,所有树都应该在完整数据集上快速训练对我来说也没什么意义。

这里是主要训练代码的一小段摘录:

xtrain, xtest, ytrain, ytest = train_test_split(features, target, test_size=testsize)
model = RandomForestQuantileRegressor(verbose=2, n_jobs=-1).fit(xtrain, ytrain)

ypred = model.predict(xtest)

这是我第一次在这里发布问题 - 如果我忘记了任何重要信息,请告诉我!非常感谢任何能帮助我的人! :)

这里有一个快速、积极维护的 QRF 实现可能会解决您的问题:https://github.com/zillow/quantile-forest

使用该包的简单示例,摘录如下:

from quantile_forest import RandomForestQuantileRegressor
from sklearn import datasets
from sklearn.model_selection import train_test_split

X, y = datasets.fetch_california_housing(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y)

qrf = RandomForestQuantileRegressor(n_estimators=10)
qrf.fit(X_train, y_train)

y_pred = qrf.predict(X_test, quantiles=[0.025, 0.5, 0.975])