修复 #970 。
根据 #929 中与@freddyaboulton的讨论,如果我们可以将额外信息传递给 DataChecks,那就太好了。 这将需要更新 DataCheck API 并考虑它如何与 AutoML 交互,因为我们不会实例化 DataChecks 的实例,而只会将 DataChecks 类作为参数传递给search()
。
@angela97lin你能描述一下这个用例吗?
@dsherry当然! 在#929 中, @freddyaboulton和我正在讨论如果InvalidTargetDataCheck
知道它正在处理的问题类型,它会变得更加有用。 例如,如果我们知道我们的问题是二进制分类,但数据检查的输入有两个以上的类,我们可以抛出警告/错误。 因此,能够以某种方式传递参数或将更多信息传递给数据检查会很好。 不幸的是,这不适用于我们当前的设计,我们传递类而不是实例。
或者,我们可以为每种问题类型创建数据检查类,例如 BinaryClassificationInvalidTargetDataCheck 但这也可能会变得很麻烦,当确定 DefaultDataChecks 应该包括什么时(或者这也应该分解为 DefaultBinaryClassificationDataChecks?)
刚刚与@angela97lin @freddyaboulton讨论过
我们喜欢在管道中镜像我们用于component_graph
的模式的想法:
DataCheck
子类列表(或相同但在DataChecks
内),而不是实例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)
直接使用看起来很相似。
下一步
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多么及时! 这对我来说听起来不错😊
最有用的评论
你知道吗, @angela97lin @freddyaboulton让我们使用这个问题来跟踪 a) 更新 automl 和数据检查 API 以支持参数化和 b) 更新
InvalidTargetDataCheck
以验证目标并针对所有目标引发智能错误我们支持的类型。提及是因为我刚刚提交了一个错误 #970 并且仔细查看该问题将通过上述解决。 所以这将关闭#970。