invalid_target_data_check#
数据检查,检查目标数据是否包含缺失或无效值。
模块内容#
类摘要#
检查目标数据是否被视为无效。 |
内容#
- 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 (str 或 ProblemTypes) – 要进行数据检查的具体问题类型。例如 'binary'(二元分类)、'multiclass'(多元分类)、'regression'(回归)、'time series regression'(时间序列回归)
objective (str 或 ObjectiveBase) – 目标类的名称或实例。
n_unique (int) – 当问题类型为二元分类且目标错误地拥有超过 2 个唯一值时,要存储的唯一目标值数量。非负整数。如果为 None,则存储所有唯一值。默认为 100。
null_strategy (str) – 如果目标部分为空,应返回的操作选项类型。选项包括 impute(插补)和 drop(删除)(默认)。impute - 将返回一个 DataCheckActionOption 用于插补目标列。drop - 将返回一个 DataCheckActionOption 用于删除目标列中的空行。
属性
multiclass_continuous_threshold
0.05
方法
- 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": [] ... } ... ]