背景
今天,为了从 automl 中获得经过训练的管道,您需要在管道上调用fit
,因为 automl 总是返回管道的未经训练的副本:
automl.search(X_train, y_train)
best_pipeline = automl.best_pipeline
best_pipeline.fit(X_train, y_train)
best_pipeline.score(X_test, y_test, objectives=['MSE'])
pipeline = automl.get_pipeline(42)
pipeline.fit(X_train, y_train)
pipeline.score(X_test, y_test, objectives=['MSE'])
挑战
我们希望让人们尽可能轻松地运行 automl、选择管道并使用该管道进行迭代和调试、生成见解并部署到生产环境。
提议
在短期内(即这个问题):让best_pipeline
访问器返回一个经过训练的管道:
automl.search(X_train, y_train)
best_pipeline = automl.best_pipeline
best_pipeline.score(X_test, y_test, objectives=['MSE'])
如果 automl search 还没有运行,那个访问器应该会出错。
我对如何实现这一点的建议是更新 automl 搜索以适应最后的最佳管道,并保存对经过训练的管道的引用。
不要忘记更新用户指南!
性能测试也有影响:我们应该更新窥镜以分别记录自动搜索时间和适合最佳管道的时间,因为它们是独立的操作。
未来
从长远来看,我希望我们创建一个抽象来保存对search
调用之外的数据的引用。 这将允许我们执行诸如让get_pipeline
返回训练好的管道之类的事情,而无需在调用 automl search
期间训练所有管道。
所以计划是将X_test
和y_test
到AutoMLSearch.search
api 中? 或者它适合传递给search
的X
和y
search
?
我们是否还应该向search()
或__init__
添加一个标志train_best_pipeline
__init__
以允许用户将其关闭? 我认为这会很好,因为它们可以为用户可能不希望发生的操作增加大量额外的时间和内存
@freddyaboulton我认为它应该适合提供给search
的整个训练数据
@kmax12好点,同意,我们可以添加一个train_best_pipeline
标志,默认为 True。 在这种情况下,待定 API 为 False 时应该做什么。 我的直觉是简单地让best_pipeline
返回一个未经训练的管道,但如果有人有更好的主意,我会全力以赴。 @bchen1116仅供参考
最有用的评论
我们是否还应该向
search()
或__init__
添加一个标志train_best_pipeline
__init__
以允许用户将其关闭? 我认为这会很好,因为它们可以为用户可能不希望发生的操作增加大量额外的时间和内存