用于机器学习的 SQL 数据格式

数据挖掘 机器学习 预处理 sql
2022-03-10 18:54:57

我是机器学习的初学者,正在开始一个 ML 项目。我有大量的源材料并开始从中提取数据以存储在 SQL 中(使用 SQLite 进行初始测试,但这对于生产来说是不够的)。

我现在面临的我找不到任何答案的问题是如何扩展预处理我存储的数据以获得最佳性能?

例如,ML 方法通常不擅长处理类别,需要它们在许多显示类别的列中更像是 0/1 值,而不是在单个列中将类别作为字符串。由于我对单行有许多不同的此类情况,这意味着 SQL 中有很多额外的列来实现这种预处理。我还将对数据使用不同的 ML 方法,例如回归和分类,因此可能很难预测准确的预处理要求。

数据由百分比、时间、类别、字符串标签等组成。无论我事先做了多少预处理,从数据库检索后我都必须做一些额外的处理,因为一些预处理不可行(甚至不可能)存储在 SQL 中完全准备好。% 当然很容易,但是对于许多其他形式的数据,我什么时候做这件事仍然让我难以理解。

设置是用于日常数据检索(小更新)、数据提取和存储、建模(未知更新间隔)和预测(每天多次)的单机。由于我将使用许多不同的模型和汇总预测结果,因此我非常渴望拥有高性能而不必为此发疯。我使用 Python 工作,但如果可以显示出显着的收益,我可以转换类似 c/Java 的语言。目前的估计是大约 1000 万个数据点,但如果按类别划分,这个数字很容易达到这个数字的 10 倍。

由于我是新来的,我认为如果我在确定 SQL 中数据的最佳格式应该是什么时遗漏了任何相关的内容,那么您要求澄清是公平的。我意识到性能不如预期的那么清晰,但我不知道瓶颈会是什么。与需要额外的机器来运行部分过程相比,像一些额外的 RAM 这样的小投资并不是真正的瓶颈。

1个回答

免责声明:我根本不是在生产中部署大型 ML 系统的专家。这个答案仅基于我对许多不同 ML 问题和数据集的经验

我的谦虚建议是,在对将要应用什么样的 ML 过程有一个非常精确的想法之前,不要尝试设计数据的格式在 ML 中没有“一刀切”,并且存在真正的风险,即从数据格式开始,您最终会得到完全不适合该任务的东西。

从本地实验开始:

  • 首先使用一小部分数据。
  • 设计一些与您最终计划做的真实问题相同类型的简单问题。
  • 尽可能多地改变实验的方面:预处理、学习算法、参数、数据大小等。逐步转向更现实的任务和数据量。
  • 评估不同方法/设置的优缺点,然后选择一系列目标设置
  • 最后根据这些目标设置设计包括数据格式在内的所有内容。

在实验阶段遵循此逻辑,您可以以任何格式导出数据,以便于您正在测试的任何框架。只有在实验阶段结束时,您才能设计生产系统,例如 SQL 服务器等。