我正在构建一个工作流,用于从一个非常大的数据库(这里是通过SQL和的Vertica)中提取的数据创建机器学习模型(在我的情况下,使用Python pandas
和sklearn
软件包)pyodbc
,该过程中的关键步骤包括估算缺失预测值。在单个分析或统计平台(Python,R,Stata等)中,这很简单,但是我很好奇在多平台工作流程中该步骤的最佳位置。
在Python中使用sklearn.preprocessing.Imputer
类,使用pandas.DataFrame.fillna
方法或手动进行此操作非常简单(取决于所使用的插补方法的复杂性)。但是由于我要在亿万个记录中的数十个或数百个列中使用它,所以我想知道是否存在一种更有效的方法来提前通过SQL直接进行此操作。除了在像Vertica这样的分布式平台上执行此操作的潜在效率之外,这还具有使我们能够创建用于构建“完整”表版本的自动化管道的额外好处,因此我们不需要填写新的表集每次我们要运行模型时,都会从头开始缺少值。
我还没有找到很多指导,但是我想我们可以:
- 为每个不完整的列创建一个替代值表(例如,平均值/中位数/众数,整体或按组)
- 将替换值表与原始表连接起来,为每行和不完整的列分配一个替换值
- 如果可用,使用一系列case语句获取原始值,否则使用替代值
这是在Vertica / SQL中做的合理的事情,还是有充分的理由不打扰而只是在Python中处理它?如果是后者,是否有充分的理由在大熊猫而不是sklearn或相反的情况下这样做?谢谢!