ts_splitting_data_check#

检查时间序列训练和验证拆分是否具有足够的类别表示的数据检查。

模块内容#

类摘要#

TimeSeriesSplittingDataCheck

检查时间序列目标数据是否与拆分兼容。

目录#

class evalml.data_checks.ts_splitting_data_check.TimeSeriesSplittingDataCheck(problem_type, n_splits)[源代码]#

检查时间序列目标数据是否与拆分兼容。

如果每次拆分的训练集和验证集中的目标数据不包含所有类别(对于时间序列分类问题),这将导致估计器无法在所有潜在结果上进行训练,从而在预测期间引起错误。

参数
  • problem_type (str or ProblemTypes) – 问题类型。

  • n_splits (int) – 时间序列拆分数。

方法

name

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

validate

检查训练集和验证集目标是否与时间序列数据拆分兼容。

name(cls)#

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

validate(self, X, y)[源代码]#

检查训练集和验证集目标是否与时间序列数据拆分兼容。

参数
  • X (pd.DataFrame, np.ndarray) – 忽略。特征。

  • y (pd.Series, np.ndarray) – 目标数据。

返回

如果拆分会导致类别表示不足,则返回包含 DataCheckError 的字典。

返回类型

dict

示例

>>> import pandas as pd

将 n_splits 设置为 3 意味着数据将被分割成 4 个部分,用于迭代训练和验证拆分。第一次拆分产生 [0:25] 的训练索引和 [25:50] 的验证索引。第一次拆分的训练索引只产生一个唯一值 (0)。第三次拆分产生 [0:75] 的训练索引和 [75:100] 的验证索引。第三次拆分的验证索引只产生一个唯一值 (1)。

>>> X = None
>>> y = pd.Series([0 if i < 45 else i % 2 if i < 55 else 1 for i in range(100)])
>>> ts_splitting_check = TimeSeriesSplittingDataCheck("time series binary", 3)
>>> assert ts_splitting_check.validate(X, y) == [
...     {
...         "message": "Time Series Binary and Time Series Multiclass problem "
...                    "types require every training and validation split to "
...                    "have at least one instance of all the target classes. "
...                    "The following splits are invalid: [1, 3]",
...         "data_check_name": "TimeSeriesSplittingDataCheck",
...         "level": "error",
...         "details": {
...             "columns": None, "rows": None,
...             "invalid_splits": {
...                 1: {"Training": [0, 25]},
...                 3: {"Validation": [75, 100]}
...             }
...         },
...         "code": "TIMESERIES_TARGET_NOT_COMPATIBLE_WITH_SPLIT",
...         "action_options": []
...     }
... ]