【问题标题】:scikit-learn MinMax scaler doesn't scalescikit-learn MinMax 缩放器无法缩放
【发布时间】:2018-11-05 20:22:19
【问题描述】:

如果我有一个大数组,如何缩放 scikit-learn 函数 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],)

但它也是无穷无尽的。
我的问题是为什么会这样?对于这个问题,你有替代方案吗?

【问题讨论】:

    标签: python scipy scikit-learn bigdata


    【解决方案1】:

    您的问题源于您处理大量数据这一事实。

    MinMaxScaler 带一个参数copy,默认为True。这意味着它将复制您的数据。而且您的数据巨大。保守地假设每个数据点都是一个 32 位整数,X_train 大约是 2.8 GB。所有这些都被汇集到内存中并被复制。由于thrashing,您陷入了复制阶段。

    您如何缓解这种情况?

    1. copy=False调用构造函数。
    2. 如果这还不够改进,请查看numpy.memmap,它可以让您访问存储在内存中的大量数据。

    【讨论】:

    • 谢谢,构造函数 copy=False 完成了这项工作
    猜你喜欢
    • 2020-05-23
    • 1970-01-01
    • 2012-10-30
    • 1970-01-01
    • 2018-09-07
    • 2019-01-10
    • 2013-07-01
    • 2015-06-22
    • 1970-01-01
    相关资源
    最近更新 更多