如何使用joblib parallelbackend拟合LightGBM?

问题描述 投票:1回答:1

我正在开发一个具有2M行的模型,但是pandas数据框在读取文件时抛出内存错误。我正在使用python 3.6我使用了dask数据框来读取文件,并尝试使用scikit学习通过joblib来训练模型。代码运行良好,但是等待时间更长,内存和CPU使用率较高,这会影响其他正在运行的作业。以下代码供参考。

import dask
import dask.dataframe as dd
from dask.distributed import Client
from dask_ml.model_selection import train_test_split
import joblib
from sklearn.model_selection import GridSearchCV
from sklearn.metrics import roc_curve, auc
import lightgbm as lgb
client = Client(processes=False)
#read data and split
train_data= dd.read_parquet('s3://bucket/my-parquet-data')
X_train, X_test, y_train, y_test = train_test_split(train_data.loc[:,X],
                                                    train_data.loc[:,y],
                                                    test_size=0.20,
                                                    random_state=42)
estimator= lgb.LGBMClassifier(boosting_type='gbdt',n_jobs=-1, silent=True, importance_type='gain'
objective='binary','is_unbalance': True)

param_grid = {
'learning_rate': [0.7, 0.1, 0.15],
'n_estimators': [150, 200, 250],
'max_depth': [3,4,5]
}
gbm = GridSearchCV(estimator, param_grid, cv=3)
with joblib.parallel_backend('dask'):
# Will this use each chunk to train data. So parallel processing and boosting will work fine here? Referense on [joblib][1]
     gbm.fit(X_train, y_train,
     eval_set=[(X_test, y_test)],
     eval_metric='l1',
     early_stopping_rounds=20)
#AUC and Curve
#Any suggestions to avoid compute and still able to get auc and plot the curve?
y_test=test_y.compute().ravel()
prd_test = gbm.predict_proba(X)[:,1].compute() 
#for curve;
fpr, tpr, threshold = roc_curve(y_test, prd_test )
auc_ = auc(fpr, tpr)

任何人都可以帮助我:

1)并行后端是训练增强树的正确方法吗?我在这里是否缺少任何理论,例如并行处理和增强是否就在这里?这会处理后端的所有分区吗,即读取所有分区以适合模型。

2)优化代码以快速运行并消耗更少的内存。估算器的任何参数。我已经将n_job = -1用于并行运行

3)如何在不使用计算的情况下计算ROC / AUC(将数组放入内存中)?

4)是否有任何方法可以绘制AUC,而无需使用计算和将数组放入内存中。

我是否需要在两者之间的任何位置都需要.persist()以加快该过程?我正在使用3个工人,每个工人有2个核心谢谢您的帮助。

python machine-learning dask joblib lightgbm
1个回答
0
投票

1)您敏捷的并行后端确实应该工作。这应该确保模型拟合操作分布在您的机器上。通过n_jobs=-1

LightGBM可以在每台计算机的所有内核上运行

2)您可以尝试通过使用SVC或PCA来减少特征空间,以减少数据的维数。我也建议您重新考虑您的搜索空间。这是一个很棒的Wiki页面,介绍如何调整LightGBM模型https://github.com/microsoft/LightGBM/blob/master/docs/Parameters-Tuning.rst。您的另一选择是使用火花https://github.com/Azure/mmlspark/blob/master/docs/lightgbm.md。最后,您可以尝试运行randomizedsearchCV,因为与详尽的网格搜索相比,它确实找到了一个很好的解决方案,(您可以相应地扩展搜索空间)

我也建议您在使用提前停止时不要调整n_estimators参数。只需将其设置为例如5000,当您指定的early_stopping_rounds=20的分数没有提高时,lightgbm将停止。

我不确定您对3)和4)的含义

© www.soinside.com 2019 - 2024. All rights reserved.