Python:sklearn 的数据类型处理以及对内存使用和性能的影响

数据挖掘 Python scikit-学习 预处理
2022-02-20 06:43:18

我目前正在努力减少我的数据(Pandas DataFrame)的内存使用量。这很顺利:将浮点数向下转换为更小的浮点数,将整数转换为更小的浮点数并将字符串对象转换为类别,然后在读取数据时直接使用这些新定义的类型。我什至有兴趣更进一步(通常将一些浮点数舍入以将它们向下转换为 int)。

但是我怀疑它可能对我的 sklearn 管道的其余部分没有太大影响(我的数据类型 int、浮点数和类别的预处理,以及小型 ANN 的校准)。进一步来说 :

  • 我在文档中找不到任何内容,但在 GitHub 上似乎有大量讨论关于哪个转换器可以处理 float32。这可能会限制向下转换我的浮点数的有用性,但对于某些转换(最小/最大缩放器、对数转换)可能会将我的整数“向上转换”为浮点数。

  • 类别似乎像预处理步骤中的对象一样处理。这些特征主要通过分类编码。所以只要标签处理得当,我认为应该不会有太大影响。

  • 我不清楚如何通过主模型拟合序列处理这些预处理数据。从文献来看,float 精度似乎会对整体产生重大影响(降低 float 精度,在不去除太多信息的情况下,可以提高校准速度和模型的整体统计性能)。但目前尚不清楚如何确保在整个 Sklearn 过程中使用足够但不是太多的浮点精度。

那么,一般来说,确保 Sklearn 在内存使用和操作精度方面高效的步骤是什么?

1个回答

总的来说,scikit-learn 的设计不是低效的,但它的目标不是高效率。如果您的目标是超高效,那么您应该切换到不同的机器学习包。

scikit-learn 的目标是为机器学习提供高级接口,并“在后台”处理实现细节。这就是为什么很少有关于如何处理不同数据类型的文档。如果您对不同的算法如何处理不同的数据类型感兴趣,您必须直接查看源代码。所有scikit-learn 源代码都在 GitHub 上