Sql server 在SQL Server中组织和维护预测模型输入功能的好方法是什么?

Sql server 在SQL Server中组织和维护预测模型输入功能的好方法是什么?,sql-server,database-design,machine-learning,prediction,Sql Server,Database Design,Machine Learning,Prediction,考虑一个玩具论坛数据库,其中包含用户、帖子、投票等表格 假设我们有一个机器学习系统,用于根据某些特征对用户进行分类。这些功能是由一组建模人员设计的,可能包括直接来自用户列的值(例如,用户年龄),以及更复杂的查询,这可能需要在链接表上进行聚合(例如,最新发布的投票数或带有正投票数的发布数),等等) 假设可能有数百个这样的功能,它们可以用于不同的模型中,用于不同的目的。建模人员每天在一个离线的大表中重新计算所有功能。然后,建模者可以选择(比如)10-20个特征,用于生产模型。生产模型的特征将在查询时

考虑一个玩具论坛数据库,其中包含用户、帖子、投票等表格

假设我们有一个机器学习系统,用于根据某些特征对用户进行分类。这些功能是由一组建模人员设计的,可能包括直接来自用户列的值(例如,
用户年龄
),以及更复杂的查询,这可能需要在链接表上进行聚合(例如,
最新发布的投票数
或带有正投票数的发布数),等等)

假设可能有数百个这样的功能,它们可以用于不同的模型中,用于不同的目的。建模人员每天在一个离线的大表中重新计算所有功能。然后,建模者可以选择(比如)10-20个特征,用于生产模型。生产模型的特征将在查询时在线计算

组织和维护这些功能的合理方便和高效的方法是什么

为了解释我的意思,考虑三个选项:

  • 维护大型“脱机表”生成脚本,该脚本包含特征计算的所有逻辑。Cherry将此脚本的必要部分提取到生产中使用的存储过程中。 这很好,因为脱机表生成脚本和storedproc都可能变得相当高效——我们只能连接必要的辅助表一次,并在一个地方对它们进行所有聚合。 糟糕的是,这种方法很难维护,因为在定义特性的方式和位置上没有模块化。通常不能简单地将“脱机”脚本的一部分复制粘贴到“联机”过程中,因为
    select
    s和
    join
    s在这两个过程中的结构可能不同

  • 将每个功能维护为
    user\u id
    的标量用户定义函数。这提供了最大的模块化,使在线和离线脚本都非常简单,但这可能会使离线表计算变得相当缓慢-如果100个特性需要在同一个表上聚合,那么服务器可能不够聪明,无法避免100次额外的遍历(不过,我自己没有测试)

  • 将相关功能组维护为表值用户定义函数或视图。这可能会在效率和可维护性之间提供一个很好的折衷方案

虽然我个人的偏好似乎是后一种选择,但我想知道我是否在这里发明了轮子。也许已经有解决这个问题的既定方案了