1

我有一个具有以下结构的数据框式数据集,在磁盘上存储为大量 csv 文件:

[ target_col | timestamp_col | feature_1 | feature_2 | ... | feature_10000 ]
     int32         int64         float64    float64             float64

我想将此数据加载到一个 dask 数据框中,并将其拆分为 ' X_train, X_test, y_train, y_test' 样式分区,其中在列上完成训练/测试拆分timestamp,并且X数据框由除target_col. 自然,y数据框仅包含target_col.

我还想将这些数据加载到 LightGBM 数据集中(尽管这是一个选项)。

这是我到目前为止所拥有的:

with Client() as client:

    files = glob.glob(os.path.join(LOCAL_PATH, 'data/*'))
    data = dd.read_csv(files[0:], dtype=col_dtypes)

    train = data.loc[data.timestamp_col < 1591010111]
    test = data.loc[data.timestamp_col > 1591010111]


    train = train.persist()
    x_cols = [c for c in train.columns if c not in ['target_col', 'timestamp_col']]

    X_train = train[x_cols]
    y_train = train['target_col']

    X_test = test[x_cols]
    y_test = test['target_col']

    print('Loading data into lightgbm.datasets...')
    train = lightgbm.Dataset(X_train.compute(), label=y_train.compute())
    
    test = lightgbm.Dataset(X_test.compute(), label=y_test.compute())

但是,这具有非常高的峰值内存使用量(远远大于数据集的总大小),我认为我在这里使用 Dask 并没有最大限度地提高效率。有没有更好的方法来做到这一点,“导致较低的峰值内存使用率”更好?

4

0 回答 0