Evalml: データチェックのパラメータ化をサポートします。 InvalidTargetDataCheckにproblem_typeを使用してターゲットを検証させる

作成日 2020年07月15日  ·  6コメント  ·  ソース: alteryx/evalml

修正#970。

#929での@freddyaboultonとの話し合いによると、DataChecksに追加情報を渡すことができれば素晴らしいと思います。 これには、DataCheck APIを更新し、AutoMLとの相互作用を考慮する必要があります。これは、DataCheckのインスタンスをインスタンス化せず、DataChecksクラスをパラメーターとしてsearch()に渡すだけだからです。

enhancement

最も参考になるコメント

@ angela97lin @freddyaboultonは、この問題を使用して、a)automlとデータチェックAPIを更新してパラメーター化をサポートし、b) InvalidTargetDataCheckを更新してターゲットを検証し、すべてのターゲットに対してインテリジェントエラーを発生させます。サポートするタイプ。

バグ#970を提出したばかりなので、詳しく説明すると、問題は上記で修正されます。 したがって、これは#970を閉じます。

全てのコメント6件

@ angela97linこのユースケースについて説明していただけますか?

@dsherryもちろんです! #929で、 @ freddyaboultonと私は、処理している問題のタイプを認識していれば、 InvalidTargetDataCheckがさらに役立つとしたらどうなるかについて話し合っていました。 たとえば、問題が二項分類であることがわかっていても、データチェックへの入力に3つ以上のクラスがある場合、警告/エラーをスローする可能性があります。 したがって、何らかの方法でパラメータを渡すことができるか、データチェックにさらに多くの情報を渡すことができると便利です。 残念ながら、これは、インスタンスではなくクラスを渡す現在の設計ではうまく機能しません。

または、BinaryClassificationInvalidTargetDataCheckなど、問題の種類ごとにデータチェッククラスを作成することもできますが、DefaultDataChecksに含める必要があるものを決定するときに、これもかなり厄介になる可能性があります(または、これもDefaultBinaryClassificationDataChecksに分解する必要がありますか?)

@ angela97lin @ freddyaboultonと話し合ったばかり

パイプラインでcomponent_graphに使用するパターンをミラーリングするというアイデアが気に入っています。

  • データチェックのリストは、インスタンスではなく、 DataCheckサブクラス(または同じですがDataChecks内)のリストとしてautoml検索に最初に指定できます。
  • automl searchがデータチェックを実行するようになると、 DataChecksクラスのインスタンスを作成できます
  • その時点で、パイプラインparametersと同様に、 data_check_parameters dictを渡します。これには、1つ以上のデータチェックのオプションの構成が含まれています。
  • ユーザーがDataChecksを直接使用したい場合は、同様のパターンに従うことができます
  • data_check_parametersはデフォルトでNoneになるはずなので、必要がなければ作成する必要はありません。 ただし、必要な引数がデータチェックにない場合(一部の場合problem_typeなど)、初期化エラーが発生するはずです。

これがautoml検索でどのように見えるかのスケッチです:

# today this helper standardizes the input to a list of `DataCheck` instances, and wraps that in a `DataChecks` instance
# after this work, this would standardize the input to a `DataChecks` class.
# if `data_checks` was already a `DataChecks` class, do nothing. else if `data_checks` is a list of `DataCheck` classes, define a `AutoMLDataChecks` class to wrap and return that
data_checks_class = self._validate_data_checks(data_checks)
# next we create the `DataChecks` instance by passing in data checks parameters
data_check_parameters = {'Target Datatype Data Check': {'problem_type': self.problem_type}}
data_checks = data_checks_class(data_check_parameters)
data_check_results = data_checks.validate(X, y)

直接の使用法も同様に見えます。

次のステップ

  • @ angela97lin @ freddyaboultonの人が上記のスケッチと健全性を確認します-確認してください
  • @ angela97linは、#960に関する議論に基づいて、 TargetDatatypeデータチェック(名前は未定)の追加を追跡するための問題を提出します。 そのデータチェックでは、 problem_typeパラメータを渡す必要があります
  • この問題を取り上げる人は誰でも、同じタイミングでそのTargetDatatypeの問題を取り上げて、これを作成する必要があります。 🛠️😁

@dsherry計画は私には良さそうです! 私が追加する唯一のことは、新しいデータチェックを作成するよりも、既存のInvalidTargetDataCheckを拡張することを好むということですが、どちらのアプローチでもうまくいきます。 これを受け取る人は誰でも、 problem_typeがバイナリの場合、ターゲットに2つの一意の値しかないことを確認してください。 これは#929のレビューで言及されました。

if problem_type == "binary" and len(set(y)) != 2:
    # Warn that we do not have two unique values in y

@ angela97lin @freddyaboultonは、この問題を使用して、a)automlとデータチェックAPIを更新してパラメーター化をサポートし、b) InvalidTargetDataCheckを更新してターゲットを検証し、すべてのターゲットに対してインテリジェントエラーを発生させます。サポートするタイプ。

バグ#970を提出したばかりなので、詳しく説明すると、問題は上記で修正されます。 したがって、これは#970を閉じます。

@dsherryなんてタイムリー! それは私にはいいですね😊

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