提问人:Jonathan Roy 提问时间:9/27/2023 最后编辑:Jonathan Roy 更新时间:9/27/2023 访问量:31
结合 minmaxscaler.partial_fit 和 joblib 并行,n_samples_seen_不是累积样本
Combining minmaxscaler.partial_fit and joblib Parallel, n_samples_seen_ is not cumulate samples
问:
我使用多处理来训练 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_scaler
xy_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)
谢谢大家的帮助
答: 暂无答案
评论