我正在处理由13个功能和550068行组成的数据集。我做了k折交叉验证并选择k
值为10,然后在我的情况下选择具有最小均方误差的最佳模型,该模型是梯度增强回归量。然后我做了超参数调整,这是我的代码:
from sklearn.ensemble GradientBoostingRegressor
gradientboost = GradientBoostingRegressor(n_estimators = 300)
from sklearn.model_selection import RandomizedSearchCV
loss = ['ls', 'lad', 'huber']
n_estimators = [100, 500, 900, 1100, 1500]
max_depth = [2, 3, 5, 10, 15]
min_samples_leaf = [1, 2, 4, 6, 8]
min_samples_split = [2, 4, 6, 10]
max_features = ['auto', 'sqrt', 'log2', None]
# Define the grid of hyperparameters to search
hyperparameter_grid = {'loss': loss,
'n_estimators': n_estimators,
'max_depth': max_depth,
'min_samples_leaf': min_samples_leaf,
'min_samples_split': min_samples_split,
'max_features': max_features}
# Set up the random search with 4-fold cross validation
random_cv = RandomizedSearchCV(estimator=gradientboost,
param_distributions=hyperparameter_grid,
cv=4, n_iter=50,
scoring = 'neg_mean_absolute_error',n_jobs = 4,
verbose = 5,
return_train_score = True,
random_state=42)
random_cv.fit(features,target)
它花了很多时间进行超参数调整它几乎需要48小时但尚未完成。我尝试了不同的n_jobs和n_iters以及cv值,但是这个过程并没有加速。enter image description here。我也分了我的将数据集分成5个相等的部分并尝试在单个部分上进行参数调整
dataframe_splits = np.array_split(dataframe, 5)
features = dataframe_splits[0].drop(columns=
['Purchase','User_ID', 'Product_ID'])
target = dataframe_splits[0]['Purchase']
但它不起作用。单个零件也需要花费大量时间。我正在使用windows10 os和处理器intel i5第7代。任何人都可以帮我弄清楚这个问题。提前谢谢。
答案 0 :(得分:1)
这是几件事的组合:
在本地计算机上训练这样的东西不会让你走得太远。如果您没有培训生产等级模型(但更像是一个侧面或大学项目),请尝试以下方法:
如果您正在为生产规模进行操作并想要使用整个数据集,则需要获得一些额外的强大计算资源,例如虚拟机和/或使用不同的包来训练渐变增强树,例如为xgboost或LightGBM。这两个都应该支持GPU培训,所以如果你有一个CUDA GPU,你也可以使用它。
答案 1 :(得分:0)
看看您的参数网格,您可以更改某些事情,这些事情可以立即减少运行时间,而无需付出太多牺牲:
verbose =5
。请删除此内容,因为这会花费大量时间。它所做的只是打印每棵树的性能。您实际上是否需要所有这些视觉干扰? return_train_score = True
。您真的需要保留训练成绩吗?可能不会。您可以删除它以节省时间。 ls
花费更长的时间,因为它是ls
和lad
的组合。如果您的数据没有异常值,请使用默认损失。如果必须使用Huber损失,请先在较小的样本上尝试。顺便说一句,在sklearn GradientBoostingRegressor中,
max_features = 'auto'
和None
含义相同。