我已经使用scikit-garden大约两个月了,尝试训练分位数回归森林(QRF),类似于这篇论文中的方法。论文的作者使用了R语言,但由于我和同事们已经熟悉Python,我们决定使用scikit-garden中的QRF实现。首先,这个包的状态很糟糕,似乎没有完全正常工作(我们不得不更改一些源代码才能使其运行)。这是我尝试使其工作的最后努力。
在完成了创建可用的数据集的代码后,我们现在尝试使用标准超参数训练一个简单的QRF,以获得误差的初步估计。到目前为止,没有一次训练运行完成,因为它似乎总是在训练最后一棵树时停滞/冻结,我总是不得不自己终止任务以免惹恼系统管理员。
例如,我最近一次训练是在8个CPU上进行的(每个CPU训练一棵树),标准设置构建并训练10棵树。除了最后一棵树外,所有树都在5-6分钟内构建并训练完毕,我让最后一棵树运行了一周才被迫终止它。重要的是,8个预留的CPU中只有一个处于活跃状态,并且(显然)以100%的负载运行。
我们的数据集相当大(约200万个观测值),但即使是使用较小的数据片段,它仍然在最后一棵树上冻结。我觉得所有树都应该在完整数据集上快速训练,除了最后一棵树,这对我来说毫无意义。
这是主要训练代码的一个小片段:
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 RandomForestQuantileRegressorfrom sklearn import datasetsfrom sklearn.model_selection import train_test_splitX, 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])