#1989の作業で、 @ freddyaboultonは、 TargetImputer
をSimpleImputer
サブクラスにすることを提案しました。 残念ながら、 _get_subclasses
で実行可能なコンポーネントを探す場合、 _get_subclasses
は階層の最下部にあるクラスのみを収集します。 例えば:
ComponentBase --> Transformer --> SimpleImputer # will only grab SimpleImputer
問題は、SimpleImputerをサブクラス化すると、TargetImputerにアクセスできるようになりますが、 SimpleImputer
が使用可能なコンポーネントとしてEvalMLによって検出されなくなることです。
ComponentBase --> Transformer --> SimpleImputer --> TargetImputer
# will only grab TargetImputer, SimpleImputer is no longer a leaf
本来の目的は、役に立たないクラス(例:Transformer)を取得しないことだと思いますが、これは、有用なコンポーネントに基づいて新しいコンポーネントを作成する場合に問題になります。
ここに元のコメント: https :
オプション:
1.)TargetImputerにSimpleImputerを使用させます。
2.)TargetImputerコンポーネントを定義せず、代わりにSimpleImputerをターゲットに適用します。
3.)コンポーネントの静的リストを優先して_get_subclasses()を削除します。 (推奨)
4。)_ get_subclasses()をよりスマートにします。
次のステップ:これを行う方法を決定するためのディスカッションをスケジュールします。
私の意見では、非基本クラスの継承をコードベースでより一般的なパターンにしたい場合を除いて、何も変更しないでください。 現在はそうしていませんので、それを可能にするシステムを構築することは私には優先度が低いようです。
この問題は、ターゲットの代入や、私たちの前にある短期間の作業、およびサブクラスを識別するための現在のシステム「作業」をブロックしていません。 もし私たちが本当に3が欲しいのなら、それは別の話です。私はそれについての議論を聞くことになりますが、それをする必要はないと思います。
また、将来、TargetImputerでSimpleImputerを活用したい場合は、継承よりもコンポジションを使用できます。これは、オプション1が参照しているものだと思います。
ここで@freddyaboultonに同意し_get_subclasses()
を定義したことにも注意してください。 3を選択する場合は、 _get_subclasses()
保持するだけでなく、SimpleImputer / TargetImputerの場合などの「例外」のリストも保持して、それらが含まれるようにする方が理にかなっていますが、 Transformer
などの他のコンポーネントも含まれます。
それが仕事を成し遂げるならば、いくつかの作曲風のテクニックのアイデアでも大丈夫です。
@ angela97linこれを閉じることができると思いますか? TargetImputer /その他のコンポーネントの開発を可能にするために、 _get_subclasses
を変更する必要がないことに同意すると思います。