处理大数据:选择样本

数据挖掘 Python 采样
2022-02-23 11:57:14

我得到了一个数据集来创建一个模型,该模型可以预测某个供应链是否能够毫不拖延地交付货物。我正在用 Python 做这个。

该数据集有 93000 个数据点,至少有 100 个给定的特征。更糟糕的是,这些特征大部分都是分类数据,每个特征都有大约 200 个独特的类别。

我想开发出最好的模型,但我发现数据集的大小太大了。

我尝试了不同的特征缩减方法。但即使是减少功能的方法,在我的笔记本电脑上花费的时间也是不可行的。所以我认为我能做的最好的事情是首先选择数据点的子样本并找到最佳模型和最佳参数,然后用这个模型训练整个数据集。

在这种情况下,从数据集中选择一个样本是我能做的最好的事情吗?

如果没有,欢迎您提出宝贵的建议。

如果是,那么选择这些样本的最佳方法是什么?

2个回答

9300个案例并不多,这甚至不属于大数据领域或任何你必须应用特殊技术的领域。

此外,考虑到更受限制的功能集,除非您在实际的砖块或 Atari 上工作,否则几乎不会遇到计算问题。作为一个基准测试示例,我能够在不到 10 分钟的时间内在我的 16gb 笔记本电脑上为 >4M 案例拟合具有多达 20-30 个功能(有些具有约 40 个级别)的模型。

因此,让我们关注真正的问题,即数据的复杂性,即可用功能/功能级别的数量以及最重要的高效代码。

假设您没有资源简单地在这个问题上投入一些云处理能力并收工,我们必须限制复杂性。

请注意,这并不意味着“对数据进行采样”,这表明仅使用案例的子集,正如开头所说,这不是您的问题。

相反,让我们讨论减少计算要求的方法:

1.优化你的代码

这听起来很简单,但要研究并确保您使用最适合这项工作的软件包,正确调整参数并减少代码中的脂肪。这是一项艰苦的工作,但这是必要的,也是值得的。

例如,您是否检查过所有代码是否尽可能多地并行化并在所有 CPU 上运行?

2.优化你的数据结构

从计算上讲,因子水平通常不是问题,但即使如此,>100 的水平也可能难以理解。尝试通过例如将某些因子级别组合在一起来转换您的数据。还可以尝试将部分数据进行透视,例如从宽数据到长数据。

3. 使用你的领域知识

您肯定了解您的业务和这个问题。不要只是把所有的数据都扔给它!想一想,删除不必要的或重复的列。

4. 向上工作

ML 建模有一个简单的衡量标准,如果经过验证的预测质量很好,那么您的模型就是好的。如果你设法用两个变量做到这一点,没人会在意。

因此,从一个包含所有案例的基本数据集开始(这里仍然要记住拆分样本验证),但只有 2-3 个最简单、最相关的预测变量(基于领域知识)以及因变量。

安装一个模型并检查它的质量,它是否足够好?是的,你完成了!如果不包括下一轮变量...

5. 模块化你的 EDA 并有耐心

我不能过分强调你的数据集真的没有那么大或复杂,所以首先优化你的代码。但是,如果需要基本 EDA 来找到最佳功能仍然需要很长时间,请执行以下操作:

  1. 通过例如仅对列的块进行PCA(再次使用所有情况,但仅使用变量的子集)来构建和模块化您的代码。

  2. 让它一个接一个地运行,如果代码运行一个小时,请耐心等待,有时就是这样。

  3. 查看结果,比较并决定如何合并结果。

6. 和你的老板谈谈

是的,我说我假设你没有资源来投入更多的力量,但如果这是一个重要的业务问题,那么应该有用于云计算的资源。在 AWS 上拟合模型非常便宜,只需几秒钟,所以实际上我们在这里讨论的是 <100 美元来训练多个模型。

如果您没有老板为这些东西付费或他不想付费,请尝试免费资源。有很多基于云的服务提供足够的免费 G​​PU 或 CPU 时间,您应该能够适应模型。

抽样数据可能是一种可能的方法。给定一个样本,您可以检查相关性,甚至可以拟合模型,而无需等待太多时间并使用任何特征排名方法。另一方面,您可以尝试是否有任何您喜欢的降维技术(pca、ca、mfa 等)可以降低复杂性。