Evalml: 支持数据检查的参数化; 让 InvalidTargetDataCheck 使用 issue_type 验证目标

创建于 2020-07-15  ·  6评论  ·  资料来源: alteryx/evalml

修复 #970 。

根据 #929 中与@freddyaboulton的讨论,如果我们可以将额外信息传递给 DataChecks,那就太好了。 这将需要更新 DataCheck API 并考虑它如何与 AutoML 交互,因为我们不会实例化 DataChecks 的实例,而只会将 DataChecks 类作为参数传递给search()

enhancement

最有用的评论

你知道吗, @angela97lin @freddyaboulton让我们使用这个问题来跟踪 a) 更新 automl 和数据检查 API 以支持参数化和 b) 更新InvalidTargetDataCheck以验证目标并针对所有目标引发智能错误我们支持的类型。

提及是因为我刚刚提交了一个错误 #970 并且仔细查看该问题将通过上述解决。 所以这将关闭#970。

所有6条评论

@angela97lin你能描述一下这个用例吗?

@dsherry当然! 在#929 中, @freddyaboulton和我正在讨论如果InvalidTargetDataCheck知道它正在处理的问题类型,它会变得更加有用。 例如,如果我们知道我们的问题是二进制分类,但数据检查的输入有两个以上的类,我们可以抛出警告/错误。 因此,能够以某种方式传递参数或将更多信息传递给数据检查会很好。 不幸的是,这不适用于我们当前的设计,我们传递类而不是实例。

或者,我们可以为每种问题类型创建数据检查类,例如 BinaryClassificationInvalidTargetDataCheck 但这也可能会变得很麻烦,当确定 DefaultDataChecks 应该包括什么时(或者这也应该分解为 DefaultBinaryClassificationDataChecks?)

刚刚与@angela97lin @freddyaboulton讨论过

我们喜欢在管道中镜像我们用于component_graph的模式的想法:

  • 数据检查列表最初可以指定为自动搜索作为DataCheck子类列表(或相同但在DataChecks内),而不是实例
  • 一旦 automl 搜索想要运行数据检查,它可以创建DataChecks类的实例
  • 那时我们将传递给它一个data_check_parameters字典,类似于我们的管道parameters ,其中包含一个或多个数据检查的可选配置。
  • 如果用户想直接使用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是二进制时检查目标是否只有两个唯一值。 在#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 等级