如果我有一个大数组的话,如何缩放MinMaxScaler的学习函数?因此,让我们定义以下内容
import numpy as np
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler(feature_range=(0, 1))让我们考虑以下数据集
Y_train # shape = (2358331,1)
X_train # shape = (2358331,302)现在我可以使用以下方法来缩放我的Y_train
%%time
Y_train = scaler.fit_transform(Y_train)很好,我得到了
CPU times: user 36.3 ms, sys: 104 ms, total: 141 ms
Wall time: 388 ms但是,当我对X_train使用相同的命令时,执行时间似乎与列数不成线性关系。因此,我尝试使用一个循环来执行每个特性的定标器。
for i in range(X_train.shape[1]):
scaled_feature =
scaler.fit_transform(X_train[:,i].reshape(X_train.shape[0],1))
X_train[:,i] = scaled_feature.reshape(X_train.shape[0],)但也是无穷无尽的。
我的问题是为什么会这样?你有别的办法解决这个问题吗?
发布于 2018-05-27 09:41:40
你的问题源于你在处理大量数据这一事实。
MinMaxScaler接受一个参数copy,默认情况下它是True。这意味着它会复制你的数据。而且你的数据是巨大的。保守地假设每个数据点都是32位整数,X_train大约是2.8G。所有这些都被注入内存并复制。由于痛击,您将陷入复制阶段。
你怎么减轻这个问题?
copy=False调用构造函数。numpy.memmap,它允许您访问存储在内存中的大型数据。https://stackoverflow.com/questions/50546065
复制相似问题