特征工程
多项式特征
在机器学习实验中,因变量与自变量之间的关系通常被假定为线性的;但情况并非总是如此。有时它们之间的关系更为复杂。构造新的多项式特征有时可以帮助捕捉这种关系,否则可能被忽略。
PARAMETERS
polynomial_features: bool, default = False
当设置为 True 时,会基于数据集中数值特征之间存在的、按照 polynomial_degree 参数指定的次数的所有多项式组合创建新特征。
polynomial_degree: int, default = 2
多项式特征的次数。例如,如果输入样本为二维,形式为 [a, b],当次数 = 2 时,多项式特征为: [1, a, b, a^2, ab, b^2]。
示例
# load dataset
from pycaret.datasets import get_data
juice = get_data('juice')
# init setup
from pycaret.classification import
clf1 = setup(data = juice, target = 'Purchase', polynomial_features = True)
之前

生成多项式特征之前的数据框视图
之后

生成多项式特征之后的数据框视图
分组特征
当数据集包含彼此相关的特征时,例如:在固定时间间隔记录的特征,可以通过 group_features 参数从现有特征为这类特征组创建新的统计特征,例如 均值、 中位数、 方差 和 标准差。
参数
group_features: 列表或列表的列表,默认 = None
当数据集包含具有相关特性的特征时,可以使用 group_features 参数进行统计特征提取。例如,如果数据集中有彼此相关的数值特征(即 'Col1'、'Col2'、'Col3'),可以在 group_features 中传入包含这些列名的列表,以提取诸如均值、中位数、众数和标准差等统计信息。
group_names: 列表,默认 = None
当传入 group_features 时,可以通过 group_names 参数传入一个由字符串组成的列表来为每个分组命名。group_names 列表的长度必须等于 group_features 的长度。如果长度不匹配或未传入名称,则新生成的特征会按顺序命名为 group_1、group_2 等。
示例
# load dataset
from pycaret.datasets import get_data
credit = get_data('credit')
# init setup
from pycaret.classification import
clf1 = setup(data = credit, target = 'default', group_features = ['BILL_AMT1', 'BILL_AMT2', 'BILL_AMT3', 'BILL_AMT4', 'BILL_AMT5', 'BILL_AMT6'])
之前

分组特征处理前的数据框
之后

分组特征处理后的数据框
数值特征分箱
特征分箱是一种使用预定义箱数将连续变量转为类别值的方法。当连续特征具有过多唯一值或存在少量超出预期范围的极端值时,该方法较为有效。此类极端值会影响训练出的模型,从而影响模型的预测精度。在 PyCaret 中,可以使用 bin_numeric_features 参数 设置 将连续数值特征划分为区间。PyCaret 使用 Sturges 规则来确定箱数,并使用 K-Means 聚类将连续数值特征转换为类别特征。
参数
bin_numeric_features: list, default = None
当传入一个数值特征列表时,这些特征将使用 K-Means 转换为类别特征——每个箱内的值具有相同的一维 k-means 簇最近中心。簇的数量基于 Sturges 方法确定。该方法仅对高斯数据最优,对于大规模非高斯数据集会低估箱数。
示例
# load dataset
from pycaret.datasets import get_data
income = get_data('income')
# init setup
from pycaret.classification import
clf1 = setup(data = income, target = 'income >50K', bin_numeric_features = ['age'])
Before

数值分箱特征分箱之前的 DataFrame 视图
After

数值分箱特征分箱之后的 DataFrame 视图
合并稀有类别
有时数据集中可能包含具有非常多类别(即高基数)的分类特征(或多个这样的分类特征)。如果将这些特征编码为数值,则得到的矩阵可能是稀疏矩阵。这不仅会因为特征数量及数据集规模的大幅增加而使实验变慢,还会为实验引入噪声。可以通过合并高基数特征中的稀有类别来避免稀疏矩阵。在 PyCaret 中可以使用 rare_to_value 参数来实现此操作。
参数
rare_to_value: float or None, default=None
分类列中类别出现的最小比例。若某类别的出现频率低于 rare_to_value * len(X),则用 rare_value 中的字符串替换该类别。使用此参数可在对列进行编码前对稀有类别进行分组。如果为 None,则忽略此步骤。
rare_value: str, default="rare"
用于替换稀有类别的值。当 rare_to_value 为 None 时忽略。
示例
# load dataset
from pycaret.datasets import get_data
income = get_data('income')
# init setup
from pycaret.classification import
clf1 = setup(data = income, target = 'income >50K', rare_to_value = 0.1)
之前

合并稀有类别之前的数据框视图
之后

合并稀有类别之后的数据框视图
合并稀有类别的效果
