Evalml: AutoMLSearch:在同一个实例上调用搜索两次不起作用

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

不确定这是否是预期的行为,但是当我在同一个 automl 对象上调用automl.search(X, y)时,第二次搜索将运行基线回合然后退出,因为迭代次数从 6(或 1+num 次迭代)开始从第一次搜索):

image

所有5条评论

@angela97lin我认为错误是我们第二次对基线进行评分,但我认为第二次没有搜索非基线管道。

我认为对搜索的第二次调用应该是空操作,所以也许我们应该重构搜索以仅在第一“轮”中对基线进行评分。 你怎么认为?

@freddyaboulton嗯,我喜欢你的提议! 不过,有一个考虑:如果用户为同一个 automl 对象传入不同的 X, y,我们仍然希望重新计算基线分数,对吗? 然而,我们还没有办法跟踪会话,所以我想知道是否最好重新计算基线以防万一?

在更大的范围内,是否打算让用户能够重用相同的 automl 对象? 或者他们每次想要运行搜索时都应该创建一个新对象吗?

很棒的观点@angela97lin ! 我认为我们当前的AutoMLSearch设计适合您提到的“每次搜索一个对象”范例。 我的理由是,用户在创建搜索时指定的许多配置参数都特定于手头的问题/数据集( problem_typeallowed_pipelinesobjective )。 这些参数的值可能对于一种Xy是合理的,但对于相同问题类型的任何其他给定的Xy则不合理. 此外,如果我们让用户在单独的数据集上调用搜索, rankings表会产生误导,因为 cv 分数将无法直接比较。

所以我认为,如果我们想遵循目前的情况,我们应该采用“无操作”解决方案:确保在满足停止条件的情况下,在随后的搜索调用中不会对管道进行评分。 我认为只有在我们更改设计以允许重用相同的搜索对象时,我们才应该重新计算基线。

很高兴谈论我们是否应该重构/重新设计AutoMLSearch以允许多次调用search 。 我对什么对我们的最终用户最有用还没有强烈的意见!

@angela97lin @freddyaboulton感谢您的归档和精彩讨论。 我同意!

正如你们所提到的,我们一直在讨论这种自下而上的问题,即“鉴于我们当前的 API,行为应该是什么?”,但我们也应该考虑自上而下的问题,即“用户想要做什么?使用自动搜索?” 我认为,如果我们决定要支持暂停和恢复搜索等行为,我们应该考虑为此构建不同的 API (#1047),然后再花时间进一步更新AutoMLSearch

考虑到这一点,当我们在第一次调用后在AutoMLSearch实例上再次调用search时应该发生的选项(不一定是相互排斥的):

  1. 当前的错误行为
  2. 错误:“不允许在 AutoMLSearch 实例上多次运行搜索”
  3. 无操作:什么都没有发生。
  4. 从头开始重新运行整个搜索。 在先前调用search期间创建的所有状态都被覆盖
  5. 从停止处“继续”或“恢复”搜索

我同意选项 0(当前行为)有问题,我们应该更改它。 目前我最喜欢选项 2 或 3。 我认为我们现在应该选择选项 3,如果觉得构建起来太复杂,我们可以回到选项 2。从长远来看,我实际上最喜欢选项 4(继续),但我认为我们应该放弃它现在。

@dsherry @angela97lin @freddyaboulton现在 AutoMLSearch 通过AutoMLSearch的初始化而不是在搜索函数中接收X_trainy_train ,选项 3 仍然是继续进行的最佳方式? 由于搜索的 X 和 y 数据如果它们简单地调用 search 将是相同的,我们可以只调用 no-op 而不是从头开始运行搜索? 但除此之外,我认为在这个问题上没有更多的事情要做。 让我知道你的想法!

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