Evalml: 更新管道和组件以返回 Woodwork 数据结构

创建于 2020-11-04  ·  5评论  ·  资料来源: alteryx/evalml

1393 更新了管道以接受 Woodwork 数据结构,#1288 解决了更新管道和组件以接受 Woodwork 数据结构作为输入。 但是, transformpredict等方法的输出仍然是 pandas DataFrame,这很奇怪。 此问题跟踪更新我们的方法以返回 Woodwork 数据结构。

最有用的评论

似乎第三个选项是最好、最干净的选项。 希望性能不会受到影响,但从概念上讲,它似乎是合理的。 感谢您引起我的注意……试图将所有事情都包裹起来。

所有5条评论

考虑到 Woodwork 正在敲定重大更新的计划,暂时不考虑这一点。 如果 Woodwork 成为 pandas 的延伸,我们可能不想或不需要这样做。

@angela97lin和我签到,并讨论了一些实现选项:

  1. 让组件图评估将 pandas 传递给每个组件。 要向组件指示 ww 类型,可以向fit等添加新字段,或者坚持使用初始化参数来指示相关列的文本特征化器模式。 缺点:从 API 的角度来看很难看,这就是我们首先创建木制品的原因。
  2. 在组件图评估期间,将木制品传递给每个组件。 让每个组件返回 pandas。 缺点:一个潜在的限制是组件不能改变输入特征或新生成特征的木制品类型,除非通过改变 pandas dtype。 但是,我们没有任何依赖于此的组件。
  3. 在组件图评估期间,将木制品传递给每个组件。 让每个组件返回木制品。 挑战:大多数组件必须在内部转换为 pandas 才能进行转换,例如添加功能、删除功能或修改功能。 在这些转换之后,我们必须确保原始木制品类型进入新返回的木制品数据表,否则用户覆盖的设置将丢失,就像现在一样。

状态: @angela97lin目前正在 #1668 中追求选项 3

计划:我们将继续该策略,注意由于多个 ww 数据表实例化而减少的运行时间。 我们会考虑是否应该对木制品提出任何功能要求,以使其更容易。 我们还将密切关注迄今为止我们可能错过的任何引人注目的选项。

@chukarsten @gsheni

似乎第三个选项是最好、最干净的选项。 希望性能不会受到影响,但从概念上讲,它似乎是合理的。 感谢您引起我的注意……试图将所有事情都包裹起来。

对此进行黑客攻击并进行更多思考:

最终目标是我们需要一些方法来跟踪用户想要的原始逻辑类型。 这可能是组件图保存的信息,或者传递给每个组件,这些组件负责在转换一些数据后将这些类型设置回来。 目前追求3,并将信息添加到组件图中,因为这是最容易测试的(而不是更新每个组件)......但在组件级别,它没有意义。

假设用户指定了 Woodwork DataTable 并将分类 col 显式转换为自然语言。 用户将其传递给组件。 我们需要转换为 pandas 以传递给外部库,并且我们希望返回一个 Woodwork 对象。 如果我们简单地调用 Woodwork 构造函数,它只会采用推断类型(分类),这很奇怪吗? 所以我们应该跟踪原始指定的自然语言类型并在返回给用户之前进行转换。

值得注意的是标准缩放器:它可以采用 int 列并将它们转换为浮点数。 如果我们然后尝试将 col 设置回原始类型 (int),我们会因为在不安全的情况下尝试将 float 转换为 int 而大喊大叫。 😬

更新:与@dsherry和@chukarsten 进行了快速讨论。 我目前正在实现#3,但是让组件图处理跟踪原始用户类型并在它从组件传递到组件时更新该信息。 这工作正常,让我们进入 AutoML / 管道工作的地方,但是在 #1668 合并后,我们应该在组件级别处理这个问题并从组件图中删除这个代码。

我的下一个待办事项:通过从 main 更新分支来修复索引测试,清理可以解决与此 PR 无关的注释和文件问题(只是一般的清理代码)。 一旦代码更干净,寻找冗余和配置文件,看看这个巨大的时间差异来自哪里/我们可以做些什么。

此页面是否有帮助?
0 / 5 - 0 等级