Evalml: AutoMLSearch get_pipeline 始终返回具有相同名称的管道

创建于 2021-03-02  ·  3评论  ·  资料来源: alteryx/evalml

复述:

from evalml.automl import AutoMLSearch
from evalml.demos import load_breast_cancer

X, y = load_breast_cancer()
automl = AutoMLSearch(X, y, problem_type="binary", max_batches=1)
automl.search()

pipelines = [automl.get_pipeline(i) for i in range(3)]
assert [p.name for p in pipelines] == ['LightGBM Classifier w/ Imputer', 'LightGBM Classifier w/ Imputer', 'LightGBM Classifier w/ Imputer']

管道不应全部具有相同的名称。 估计量不同:

[p.estimator.name for p in pipelines]
['Baseline Classifier', 'Decision Tree Classifier', 'LightGBM Classifier']
bug needs design

最有用的评论

我相信这源于 #1400 。 我认为我们陷入了困境(双关语) - 我们的管道设计依赖于设置类属性来定义管道,这有助于像我们在搜索中所做的那样动态生成管道类。 问题是这些管道不能从 AutoMLSearch 中“导出”。

我可能忽略了一个简单的解决方案,但我认为如果我们想解决这个问题并保持我们的 automl 管道可以进行pickle,这将需要深入的设计讨论。

所有3条评论

不仅仅是名字; 超参数(我怀疑存储在类中的其他值)也会更新。 这是因为我们正在使用GeneratedPipelineBinary类并更新其类变量。 由于每个管道都是GeneratedPipelineBinary ,它将为整个类更新它并影响所有实例。

我相信这源于 #1400 。 我认为我们陷入了困境(双关语) - 我们的管道设计依赖于设置类属性来定义管道,这有助于像我们在搜索中所做的那样动态生成管道类。 问题是这些管道不能从 AutoMLSearch 中“导出”。

我可能忽略了一个简单的解决方案,但我认为如果我们想解决这个问题并保持我们的 automl 管道可以进行pickle,这将需要深入的设计讨论。

计划
短期:此问题跟踪从 #1400 恢复更改以解决错误行为。 我们的管道不支持 python pickle但仍然可以使用现有的save / load功能进行序列化,这些功能使用cloudpickle

长期:在恢复之后,#1956 跟踪弄清楚我们应该如何支持使用 python pickle保存 evalml 管道。

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