【问题标题】:Python: Memory error when running fit_transform with StandardScalerPython:使用 StandardScaler 运行 fit_transform 时出现内存错误
【发布时间】:2019-01-17 11:19:24
【问题描述】:

我有一个包含 300 多列的庞大数据集,由于 90% 的列本质上是分类的,因此我决定对它们进行一次热编码,从而产生一个形状为 (466557、1778) 的数据集。我正在尝试使用以下方法扩展此数据:

from sklearn import preprocessing as p
scaler = p.StandardScaler()
df_ss = scaler.fit_transform(df)

但是,我遇到了内存错误。

MemoryError            Traceback (most recent call last)
<ipython-input-92-d766bc7d2870> in <module>()

如何防止这种情况发生?

【问题讨论】:

    标签: python-3.x scikit-learn jupyter-notebook


    【解决方案1】:

    不要标准缩放虚拟变量! 标准缩放用于将连续变量转换为均值为 0 标准差为 1 的变量。
    由于您使用 One Hot 编码,分类变量现在仅由 1 和 0 组成(如果存在二进制变量,则 1 表示 True,否则 0 表示 False):

    我还可能补充说,如果您的数据集太大,您可能会在开发后期遇到其他内存错误。 检查每个分类特征并检查它们是否不是序数(您可以订购它们),如果它们不使用 One hot encoder 而是用数字替换值(相对于顺序)。如果您正在使用大基数分类,您还可以使用散列技巧。但以更一般的方式,我建议您寻找更好的方法来编码您的分类变量!

    【讨论】:

      【解决方案2】:

      也许您可以尝试分别缩放每一行?

      【讨论】:

      • 你会怎么做?代码 sn-p 可能会有所帮助。
      • 好的,我在没有你的一些代码的情况下工作。我假设 df 是熊猫数据框?标准缩放器只是简单地去除平均值并除以标准差,请参阅scikit-learn.org/stable/modules/generated/…。类似于:对于 df.keys() 中的列:mean,std = df[column].mean(),df[column].std() df[column] = (df[column]-mean)/std 应该缩放列,假设它们是浮点数/整数。如果这不能解决内存问题,您甚至可以分块更新列。
      • 希望对您有所帮助!如果我无法重现错误,就很难提供帮助。
      • 谢谢海尔默。我会试试看。虽然,我排除了 one-hot 编码列并仅在对我有用的数字列上重新进行缩放。
      猜你喜欢
      • 1970-01-01
      • 2016-08-25
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 2020-04-13
      • 1970-01-01
      • 2018-05-20
      相关资源
      最近更新 更多