结合 minmaxscaler.partial_fit 和 joblib 并行,n_samples_seen_不是累积样本

Combining minmaxscaler.partial_fit and joblib Parallel, n_samples_seen_ is not cumulate samples

提问人:Jonathan Roy 提问时间:9/27/2023 最后编辑:Jonathan Roy 更新时间:9/27/2023 访问量:31

问:

我使用多处理来训练 sklearn minmax 缩放器。 我有大量的 csv 需要考虑,所以我使用 ..partial_fit

一切似乎都运行良好,但最后当我检查我的洁牙机时,我发现了奇怪的事情。

考虑我所有的 csv 列都具有相等的行号。我在所有特征上训练缩放器,在单个列上训练另一个缩放器。

当我查看n_samples_seen_时,我得到了以下结果:

如果我只运行一个 csv...

xy_scaler.n_samples_seen_= 14609(一个 CSV 中的行数)

y_scaler.n_samples_seen_= 6 (!??)

用 2 个 csv...

xy_scaler.n_samples_seen_= 14609

y_scaler.n_samples_seen_= 12

两个剥皮机都应该累积看到的样本,但只能这样做。当我在没有 joblib Parallel 的情况下运行 for 循环时,它有效。y_scalerxy_scaler

为什么只找到 6 个样本?y_scaler

我想确保我的缩放器在所有 csv 数据上都接受过训练,而不仅仅是在看到的最后一个 csv 上。

import glob
import pandas as pd
import sklearn.preprocessing as sk
import numpy as np
from joblib import Parallel, delayed
import multiprocessing

bd_path = 'E:/Python/Data/hydrology_forcasting/Caravan/timeseries/compil/'

min=-1
max=1
path_list=glob.glob(bd_path +'*.csv')
col_selection =[7,2,5]
label=2
xy_scaler = sk.MinMaxScaler(feature_range=(min, max))
y_scaler = sk.MinMaxScaler(feature_range=(min, max))
TOTAL_NUM_CORES = multiprocessing.cpu_count()


def loop_loading_train(one_csv_path, xy_scaler, y_scaler, feature_selection):
    
    data = pd.read_csv(one_csv_path, 
                    usecols=feature_selection)#,
                    #   engine='pyarrow'),
                    #   dtype_backend='pyarrow')
    
    y_scaler.partial_fit(np.array(data.iloc[:label]).reshape(-1,1))
    xy_scaler.partial_fit(data)



Parallel(n_jobs=TOTAL_NUM_CORES, backend="threading")(delayed(loop_loading_train)(filename, xy_scaler, y_scaler, col_selection) for filename in path_list)

谢谢大家的帮助

python scikit-learn 并行处理 joblib

评论


答: 暂无答案