预处理#

预处理工具函数。

子模块#

包内容#

类摘要#

NoSplit

不将训练数据拆分为训练集和验证集。

TimeSeriesSplit

用于时间序列问题的滚动原点交叉验证。

TrainingValidationSplit

将训练数据拆分为训练集和验证集。

函数#

load_data

从文件加载特征和目标。

number_of_features

获取 DataFrame 中每种特定 dtype 的特征数量。

split_data

将数据拆分为训练集和测试集。

split_multiseries_data

将堆叠的多系列数据拆分为训练集和测试集。未堆叠的数据可以使用 split_data

target_distribution

获取目标分布。

内容#

evalml.preprocessing.load_data(path, index, target, n_rows=None, drop=None, verbose=True, **kwargs)[source]#

从文件加载特征和目标。

参数
  • path (str) – 文件路径或 http/ftp/s3 URL。

  • index (str) – 用作索引的列。

  • target (str) – 用作目标的列。

  • n_rows (int) – 要返回的行数。默认为 None。

  • drop (list) – 要删除的列列表。默认为 None。

  • verbose (bool) – 如果为 True,打印关于特征和目标的信息。默认为 True。

  • **kwargs – 应传递给 pandas 的 read_csv 方法的其他关键字参数。

返回值

特征矩阵和目标。

返回类型

pd.DataFrame, pd.Series

class evalml.preprocessing.NoSplit(random_seed=0)[source]#

不将训练数据拆分为训练集和验证集。

所有数据都作为训练集传递,测试数据仅为 None 的数组。用于未来的无监督学习,不应在任何当前支持的管道中使用。

参数

random_seed (int) – 用于随机采样的种子。默认为 0。未使用。

方法

get_metadata_routing

获取此对象的元数据路由。

get_n_splits

返回此对象的拆分数量。

is_cv

返回数据拆分器是否为交叉验证数据拆分器。

split

将数据划分为训练集和测试集,其中测试集为空。

get_metadata_routing(self)#

获取此对象的元数据路由。

请查看 用户指南 了解路由机制的工作原理。

返回值

routing – 一个封装路由信息的 MetadataRequest 对象。

返回类型

MetadataRequest

static get_n_splits()[source]#

返回此对象的拆分数量。

返回值

始终返回 0。

返回类型

int

property is_cv(self)#

返回数据拆分器是否为交叉验证数据拆分器。

返回值

如果拆分器是交叉验证数据拆分器

返回类型

bool

split(self, X, y=None)[source]#

将数据划分为训练集和测试集,其中测试集为空。

参数
  • X (pd.DataFrame) – 要拆分的数据框

  • y (pd.Series) – 要拆分的数据序列

返回值

将数据拆分为训练集和测试集的索引

返回类型

list

evalml.preprocessing.number_of_features(dtypes)[source]#

获取 DataFrame 中每种特定 dtype 的特征数量。

参数

dtypes (pd.Series) – 要获取特征数量的 DataFrame.dtypes。

返回值

dtypes 以及每种输入类型的特征数量。

返回类型

pd.Series

示例

>>> X = pd.DataFrame()
>>> X["integers"] = [i for i in range(10)]
>>> X["floats"] = [float(i) for i in range(10)]
>>> X["strings"] = [str(i) for i in range(10)]
>>> X["booleans"] = [bool(i%2) for i in range(10)]

列出每种 dtype 对应的列数。

>>> number_of_features(X.dtypes)
             Number of Features
Boolean                       1
Categorical                   1
Numeric                       2
evalml.preprocessing.split_data(X, y, problem_type, problem_configuration=None, test_size=None, random_seed=0)[source]#

将数据拆分为训练集和测试集。

参数
  • X (pd.DataFramenp.ndarray) – 形状为 [n_samples, n_features] 的数据

  • y (pd.Seriesnp.ndarray) – 长度为 [n_samples] 的目标数据

  • problem_type (strProblemTypes) – 监督学习问题类型。完整列表请参阅 evalml.problem_types.problemtype.all_problem_types。

  • problem_configuration (dict) – 配置搜索所需的额外参数。例如,在时间序列问题中,应为 time_index、gap 和 max_delay 变量传入值。

  • test_size (float) – 应包含在测试集中的数据点百分比。非时间序列问题默认为 0.2 (20%),时间序列问题默认为 0.1 (10%)。

  • random_seed (int) – 随机数生成器的种子。默认为 0。

返回值

特征和目标数据分别拆分为训练集和测试集。

返回类型

pd.DataFrame, pd.DataFrame, pd.Series, pd.Series

引发

ValueError (ValueError) – 如果缺少 problem_configuration 或多系列问题不包含 time_index 和 series_id。

示例

>>> X = pd.DataFrame([1, 2, 3, 4, 5, 6], columns=["First"])
>>> y = pd.Series([8, 9, 10, 11, 12, 13])
...
>>> X_train, X_validation, y_train, y_validation = split_data(X, y, "regression", random_seed=42)
>>> X_train
   First
5      6
2      3
4      5
3      4
>>> X_validation
   First
0      1
1      2
>>> y_train
5    13
2    10
4    12
3    11
dtype: int64
>>> y_validation
0    8
1    9
dtype: int64
evalml.preprocessing.split_multiseries_data(X, y, series_id, time_index, **kwargs)[source]#

将堆叠的多系列数据拆分为训练集和测试集。未堆叠的数据可以使用 split_data

参数
  • X (pd.DataFrame) – 输入训练数据,形状为 [n_samples*n_series, n_features]。

  • y (pd.Series) – 目标训练目标,长度为 [n_samples*n_series]。

  • series_id (str) – 包含系列 ID 的列名。

  • time_index (str) – 包含时间索引的列名。

  • **kwargs (**kwargs) – 要传递给 split_data 函数的额外关键字参数。

返回值

特征和目标数据分别拆分为训练集和测试集。

返回类型

pd.DataFrame, pd.DataFrame, pd.Series, pd.Series

evalml.preprocessing.target_distribution(targets)[source]#

获取目标分布。

参数

targets (pd.Series) – 目标数据。

返回值

目标数据及其频率分布(以百分比表示)。

返回类型

pd.Series

示例

>>> y = pd.Series([1, 2, 4, 1, 3, 3, 1, 2])
>>> print(target_distribution(y).to_string())
Targets
1    37.50%
2    25.00%
3    25.00%
4    12.50%
>>> y = pd.Series([True, False, False, False, True])
>>> print(target_distribution(y).to_string())
Targets
False    60.00%
True     40.00%
class evalml.preprocessing.TimeSeriesSplit(max_delay=0, gap=0, forecast_horizon=None, time_index=None, n_series=None, n_splits=3)[source]#

用于时间序列问题的滚动原点交叉验证。

max_delay、gap 和 forecast_horizon 参数仅用于验证所请求的拆分大小在给定这些参数时不会太小。

参数
  • max_delay (int) – 用于特征工程的最大延迟值。时间序列管道从现有特征创建延迟特征。此过程将在前 max_delay 行中引入 NaNs。拆分器使用前一个拆分的最后 max_delay 行作为当前拆分的前 max_delay 行,以避免丢弃不必要的数据。默认为 0。

  • gap (int) – 分隔用于生成特征的数据和要预测的数据的时间单位数量。默认为 0。

  • forecast_horizon (int, None) – 要预测的时间单位数量。用于参数验证。如果为整数,将设置 cv 拆分的大小。默认为 None。

  • time_index (str) – 包含用于排序数据的时间日期信息的列的名称。默认为 None。

  • n_splits (int) – 要创建的数据拆分数量。默认为 3。

示例

>>> import numpy as np
>>> import pandas as pd
...
>>> X = pd.DataFrame([i for i in range(10)], columns=["First"])
>>> y = pd.Series([i for i in range(10)])
...
>>> ts_split = TimeSeriesSplit(n_splits=4)
>>> generator_ = ts_split.split(X, y)
...
>>> first_split = next(generator_)
>>> assert (first_split[0] == np.array([0, 1])).all()
>>> assert (first_split[1] == np.array([2, 3])).all()
...
...
>>> second_split = next(generator_)
>>> assert (second_split[0] == np.array([0, 1, 2, 3])).all()
>>> assert (second_split[1] == np.array([4, 5])).all()
...
...
>>> third_split = next(generator_)
>>> assert (third_split[0] == np.array([0, 1, 2, 3, 4, 5])).all()
>>> assert (third_split[1] == np.array([6, 7])).all()
...
...
>>> fourth_split = next(generator_)
>>> assert (fourth_split[0] == np.array([0, 1, 2, 3, 4, 5, 6, 7])).all()
>>> assert (fourth_split[1] == np.array([8, 9])).all()

方法

get_metadata_routing

获取此对象的元数据路由。

get_n_splits

获取数据拆分数量。

is_cv

返回数据拆分器是否为交叉验证数据拆分器。

split

获取时间序列拆分。

get_metadata_routing(self)#

获取此对象的元数据路由。

请查看 用户指南 了解路由机制的工作原理。

返回值

routing – 一个封装路由信息的 MetadataRequest 对象。

返回类型

MetadataRequest

get_n_splits(self, X=None, y=None, groups=None)[source]#

获取数据拆分数量。

参数
  • X (pd.DataFrame, None) – 要拆分的特征。

  • y (pd.DataFrame, None) – 要拆分的目标变量。默认为 None。

  • groups – 忽略,但保留以兼容 sklearn API。默认为 None。

返回值

拆分数量。

property is_cv(self)#

返回数据拆分器是否为交叉验证数据拆分器。

返回值

如果拆分器是交叉验证数据拆分器

返回类型

bool

如果拆分器是交叉验证数据拆分器

获取时间序列拆分。

split(self, X, y=None, groups=None)[source]#

参数
  • X (pd.DataFrame, None) – 要拆分的特征。

  • y (pd.DataFrame, None) – 要拆分的目标变量。默认为 None。

  • groups – 忽略,但保留以兼容 sklearn API。默认为 None。

假设 X 和 y 已按时间升序排序。此方法可以处理传入空或 None 的 X 和 y 数据,但请注意 X 和 y 不能同时为 None 或为空。

生成

引发

Iterator of (train, test) indices tuples.

ValueError (ValueError) – 如果提出的某个拆分会为空。

将训练数据拆分为训练集和验证集。

参数
  • class evalml.preprocessing.TrainingValidationSplit(test_size=None, train_size=None, shuffle=False, stratify=None, random_seed=0)[source]#

  • test_size (float) – 应包含在验证集中的数据点百分比。如果设置了 train_size,则默认为 train_size 的补集,否则默认为 0.25。

  • train_size (float) – 应包含在训练集中的数据点百分比。默认为 test_size 的补集。

  • shuffle (boolean) – 是否在拆分前打乱数据。默认为 False。

  • stratify (list) – 使用此参数作为类别标签,以分层方式拆分数据。默认为 None。

示例

>>> import numpy as np
>>> import pandas as pd
...
>>> X = pd.DataFrame([i for i in range(10)], columns=["First"])
>>> y = pd.Series([i for i in range(10)])
...
>>> tv_split = TrainingValidationSplit()
>>> split_ = next(tv_split.split(X, y))
>>> assert (split_[0] == np.array([0, 1, 2, 3, 4, 5, 6])).all()
>>> assert (split_[1] == np.array([7, 8, 9])).all()
...
...
>>> tv_split = TrainingValidationSplit(test_size=0.5)
>>> split_ = next(tv_split.split(X, y))
>>> assert (split_[0] == np.array([0, 1, 2, 3, 4])).all()
>>> assert (split_[1] == np.array([5, 6, 7, 8, 9])).all()
...
...
>>> tv_split = TrainingValidationSplit(shuffle=True)
>>> split_ = next(tv_split.split(X, y))
>>> assert (split_[0] == np.array([9, 1, 6, 7, 3, 0, 5])).all()
>>> assert (split_[1] == np.array([2, 8, 4])).all()
...
...
>>> y = pd.Series([i % 3 for i in range(10)])
>>> tv_split = TrainingValidationSplit(shuffle=True, stratify=y)
>>> split_ = next(tv_split.split(X, y))
>>> assert (split_[0] == np.array([1, 9, 3, 2, 8, 6, 7])).all()
>>> assert (split_[1] == np.array([0, 4, 5])).all()

方法

get_metadata_routing

获取此对象的元数据路由。

get_n_splits

返回此对象的拆分数量。

is_cv

返回数据拆分器是否为交叉验证数据拆分器。

split

random_seed (int) – 用于随机采样的种子。默认为 0。

将数据划分为训练集和测试集。

获取此对象的元数据路由。

请查看 用户指南 了解路由机制的工作原理。

返回值

routing – 一个封装路由信息的 MetadataRequest 对象。

返回类型

MetadataRequest

get_metadata_routing(self)#

返回此对象的拆分数量。

返回值

static get_n_splits()[source]#

返回类型

int

始终返回 1。

返回数据拆分器是否为交叉验证数据拆分器。

返回值

如果拆分器是交叉验证数据拆分器

返回类型

bool

property is_cv(self)#

random_seed (int) – 用于随机采样的种子。默认为 0。

参数
  • X (pd.DataFrame) – 要拆分的数据框

  • y (pd.Series) – 要拆分的数据序列

返回值

将数据拆分为训练集和测试集的索引

返回类型

list

如果拆分器是交叉验证数据拆分器