invalid_target_data_check#

数据检查,检查目标数据是否包含缺失或无效值。

模块内容#

类摘要#

InvalidTargetDataCheck

检查目标数据是否被视为无效。

内容#

class evalml.data_checks.invalid_target_data_check.InvalidTargetDataCheck(problem_type, objective, n_unique=100, null_strategy='drop')[source]#

检查目标数据是否被视为无效。

目标数据在以下情况下被视为无效:
  • 目标为 None。

  • 目标包含 NaN 或 None 值。

  • 目标的 Woodwork 逻辑类型不受支持。

  • 目标和特征长度或索引不同。

  • 在分类问题中,目标的某个类别实例数量不足。

  • 对于回归问题,目标不包含数值数据。

参数
  • problem_type (strProblemTypes) – 要进行数据检查的具体问题类型。例如 'binary'(二元分类)、'multiclass'(多元分类)、'regression'(回归)、'time series regression'(时间序列回归)

  • objective (strObjectiveBase) – 目标类的名称或实例。

  • n_unique (int) – 当问题类型为二元分类且目标错误地拥有超过 2 个唯一值时,要存储的唯一目标值数量。非负整数。如果为 None,则存储所有唯一值。默认为 100。

  • null_strategy (str) – 如果目标部分为空,应返回的操作选项类型。选项包括 impute(插补)和 drop(删除)(默认)。impute - 将返回一个 DataCheckActionOption 用于插补目标列。drop - 将返回一个 DataCheckActionOption 用于删除目标列中的空行。

属性

multiclass_continuous_threshold

0.05

方法

name

返回描述数据检查的名称。

validate

检查目标数据是否被视为无效。如果输入的 features 参数不为 None,则将用于检查目标和特征是否具有相同的维度和索引。

name(cls)#

返回描述数据检查的名称。

validate(self, X, y)[source]#

检查目标数据是否被视为无效。如果输入的 features 参数不为 None,则将用于检查目标和特征是否具有相同的维度和索引。

目标数据在以下情况下被视为无效:
  • 目标为 None。

  • 目标包含 NaN 或 None 值。

  • 目标的 Woodwork 逻辑类型不受支持。

  • 目标和特征长度或索引不同。

  • 在分类问题中,目标的某个类别实例数量不足。

  • 对于回归问题,目标不包含数值数据。

参数
  • X (pd.DataFrame, np.ndarray) – 特征。如果不为 None,将用于检查目标和特征是否具有相同的维度和索引。

  • y (pd.Series, np.ndarray) – 要检查无效值的目标数据。

返回值

如果目标数据中发现任何无效值,则返回包含 DataCheckError 的列表。

返回类型

dict (DataCheckError)

示例

>>> import pandas as pd

目标值必须是整数、双精度浮点数或布尔值。

>>> X = pd.DataFrame({"col": [1, 2, 3, 1]})
>>> y = pd.Series(["cat_1", "cat_2", "cat_1", "cat_2"])
>>> target_check = InvalidTargetDataCheck("regression", "R2", null_strategy="impute")
>>> assert target_check.validate(X, y) == [
...     {
...         "message": "Target is unsupported Unknown type. Valid Woodwork logical types include: integer, double, boolean, age, age_fractional, integer_nullable, boolean_nullable, age_nullable",
...         "data_check_name": "InvalidTargetDataCheck",
...         "level": "error",
...         "details": {"columns": None, "rows": None, "unsupported_type": "unknown"},
...         "code": "TARGET_UNSUPPORTED_TYPE",
...         "action_options": []
...     },
...     {
...         "message": "Target data type should be numeric for regression type problems.",
...         "data_check_name": "InvalidTargetDataCheck",
...         "level": "error",
...         "details": {"columns": None, "rows": None},
...         "code": "TARGET_UNSUPPORTED_TYPE_REGRESSION",
...         "action_options": []
...     }
... ]

目标不能包含空值。

>>> y = pd.Series([None, pd.NA, pd.NaT, None])
>>> assert target_check.validate(X, y) == [
...     {
...         "message": "Target is either empty or fully null.",
...         "data_check_name": "InvalidTargetDataCheck",
...         "level": "error",
...         "details": {"columns": None, "rows": None},
...         "code": "TARGET_IS_EMPTY_OR_FULLY_NULL",
...         "action_options": []
...     }
... ]
...
...
>>> y = pd.Series([1, None, 3, None])
>>> assert target_check.validate(None, y) == [
...     {
...         "message": "2 row(s) (50.0%) of target values are null",
...         "data_check_name": "InvalidTargetDataCheck",
...         "level": "error",
...         "details": {
...             "columns": None,
...             "rows": [1, 3],
...             "num_null_rows": 2,
...             "pct_null_rows": 50.0
...         },
...         "code": "TARGET_HAS_NULL",
...         "action_options": [
...            {
...                 "code": "IMPUTE_COL",
...                 "data_check_name": "InvalidTargetDataCheck",
...                 "parameters": {
...                     "impute_strategy": {
...                         "parameter_type": "global",
...                         "type": "category",
...                         "categories": ["mean", "most_frequent"],
...                         "default_value": "mean"
...                     }
...                 },
...                 "metadata": {"columns": None, "rows": None, "is_target": True},
...             }
...         ],
...     }
... ]

如果目标值与传入的问题类型不匹配,将引发错误。在此示例中,目标列中只有两个值,但传入的问题类型是 multiclass(多元分类)。

>>> X = pd.DataFrame([i for i in range(50)])
>>> y = pd.Series([i%2 for i in range(50)])
>>> target_check = InvalidTargetDataCheck("multiclass", "Log Loss Multiclass")
>>> assert target_check.validate(X, y) == [
...     {
...         "message": "Target has two or less classes, which is too few for multiclass problems.  Consider changing to binary.",
...         "data_check_name": "InvalidTargetDataCheck",
...         "level": "error",
...         "details": {"columns": None, "rows": None, "num_classes": 2},
...         "code": "TARGET_MULTICLASS_NOT_ENOUGH_CLASSES",
...         "action_options": []
...     }
... ]

如果 X 和 y 的长度不同,将引发警告。对于不匹配的索引也将引发警告。

>>> target_check = InvalidTargetDataCheck("regression", "R2")
>>> X = pd.DataFrame([i for i in range(5)])
>>> y = pd.Series([1, 2, 4, 3], index=[1, 2, 4, 3])
>>> assert target_check.validate(X, y) == [
...     {
...         "message": "Input target and features have different lengths",
...         "data_check_name": "InvalidTargetDataCheck",
...         "level": "warning",
...         "details": {"columns": None, "rows": None, "features_length": 5, "target_length": 4},
...         "code": "MISMATCHED_LENGTHS",
...         "action_options": []
...     },
...     {
...         "message": "Input target and features have mismatched indices. Details will include the first 10 mismatched indices.",
...         "data_check_name": "InvalidTargetDataCheck",
...         "level": "warning",
...         "details": {
...             "columns": None,
...             "rows": None,
...             "indices_not_in_features": [],
...             "indices_not_in_target": [0]
...         },
...         "code": "MISMATCHED_INDICES",
...         "action_options": []
...     }
... ]