我正在尝试使用 lightGBM 作为分类器。我的数据保存在多个 csv 文件中,但我发现没有办法直接使用多个文件作为输入。
我曾考虑将所有数据组合成一个大数据(numpy 数组),但我的计算机没有足够的内存。可用内存不足时如何使用lightGBM处理多个数据文件?
我正在尝试使用 lightGBM 作为分类器。我的数据保存在多个 csv 文件中,但我发现没有办法直接使用多个文件作为输入。
我曾考虑将所有数据组合成一个大数据(numpy 数组),但我的计算机没有足够的内存。可用内存不足时如何使用lightGBM处理多个数据文件?
您可能想要对您的功能进行分类,然后对它们进行一次热编码。LightGBM 最适用于稀疏特征,例如 one-hot-encoded 特征,因为它的 EFB(Effective Feature Bundling)显着提高了 LightGBM 的计算效率。此外,您肯定会摆脱数字的浮动部分。
认为分类是这样的;假设其中一个数字特征的值在 36 到 56 之间变化,您可以将其数字化为 [36,36.5,37,....,55.5,56] 或 [40,45,50,55] 以使其分类的。取决于您的专业知识和想象力。你可以参考 scikit-learn 的 one-hot-encoding,它有内置的功能。
PS:对于数值特征,总是检查它的统计属性,你可以使用 pandas.describe() 来总结它的平均值、最大值、最小值、标准等。
样本。
如果您正确采样,您永远不应该(除了某些边缘情况)需要使用整个数据集。
我使用一个拥有超过 230M 记录的数据库,但我通常只选择一个 1k-100k 的随机样本来创建模型。
此外,您不妨将数据拆分为训练、测试和验证。这将有助于减少每个文件的大小。
我猜你正在使用 Python。
您的数据大小是多少?(行数 x 列数)
Lightgbm 需要将数据加载到内存中进行训练。但是,如果您还没有这样做,您可以明智地为数据的每一列选择合适的数据类型。
如果您使用 'uint8' / 'uint16' 之类的 dtype 并帮助您将所有内容加载到内存中,它可以大大减少内存占用。