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パイプラインをピクルスにできるようにするには、設計に関する深い議論が必要になると思います。

全てのコメント3件

名前だけではありません。 ハイパーパラメータ(およびクラスに格納されている他の値)も更新されます。 これは、 GeneratedPipelineBinaryクラスを使用し、そのクラス変数を更新しているためです。 各パイプラインはGeneratedPipelineBinaryであるため、クラス全体で更新され、すべてのインスタンスに影響します。

これは#1400に由来すると思います。 私たちはピクルスになっていると思います(しゃれを意図しています)-私たちのパイプライン設計は、パイプラインを定義するためにクラス属性を設定することに依存しています。これは、検索で行うように動的に生成されたパイプラインクラスを持つのに役立ちます。 問題は、これらのパイプラインをAutoMLSearchから「エクスポート」できないことです。

私が見落としている簡単な解決策があるかもしれませんが、これを修正してautomlパイプラインをピクルスにできるようにするには、設計に関する深い議論が必要になると思います。

プラン
短期的:この問題は、バグのある動作を解決するために#1400からの変更を元に戻すことを追跡します。 私たちのパイプラインはPython pickleサポートしませんが、 cloudpickleを使用する既存のsave / load機能を使用してシリアル化できます。

長期:復帰後、#1956は、 Python pickleを使用してevalmlパイプラインの保存をサポートする方法を見つけ出します。

このページは役に立ちましたか?
0 / 5 - 0 評価