pycaret学习之特征工程、特征选择
特征工程
在机器学习实验中经常会看到,通过算术运算组合的两个特征在解释数据中的差异时变得比单独使用同一两个特征更为重要。通过现有特征的交互创建新特征称为特征交互。它可以在PyCaret中使用设置中的 feature_interaction
和 feature_ratio
参数来实现。特征交互通过两个变量(a*b)相乘来创建新特征,而特征比率通过计算现有特征的比率(a/b)来创建新特征。
feature_interaction: bool, default = False 当设置为True时,它将通过对数据集中的所有数值变量(包括多项式和三角函数特征(如果创建))进行交互(a*b)来创建新特征。 此功能不可扩展,可能无法在具有较大特征空间的数据集上正常工作。 feature_ratio: bool, default = False 当设置为True时,它将通过计算数据集中所有数值变量的比率(a/b)来创建新特征。 此功能不可扩展,可能无法在具有较大特征空间的数据集上正常工作。 interaction_threshold: bool, default = 0.01 与多项式阈值类似,它通过交互作用来压缩新创建特征的稀疏矩阵。 基于随机森林、AdaBoost和线性相关组合的重要性在定义的阈值百分比范围内的特征保留在数据集中。 其余特征将在进一步处理之前删除。
一、多项式特征
在机器学习实验中,因变量和自变量之间的关系通常被假定为线性关系,但情况并非总是如此。有时因变量和自变量之间的关系更为复杂。创建新的多项式特征有时可能有助于捕获这种关系,否则可能会被忽视。PyCaret可以使用设置中的多项式特征参数从现有特征创建多项式特征。
polynomial_features: bool, default = False
当设置为True时,将基于数据集中的数字特征中存在的所有多项式组合创建新特征,
并达到多项式参数中定义的程度。
polynomial_degree: int, default = 2
多项式特征的次数。例如,如果输入样本是二维的,并且其形式为[a,b],
则次数为2的多项式特征为:[1,a,b,a^2,ab,b^2]。
polynomial_threshold: float, default = 0.1
它用于压缩多项式和三角特征的稀疏矩阵。
数据集中保留了基于随机森林、AdaBoost和线性相关组合的特征重要性在所定义阈值百分位数以内的多项式和三角特征。
其余特征将在进一步处理之前删除。
二、三角特征
与多项式特征类似,PyCaret还允许从现有特征创建新的三角特征。它是在设置中使用三角特征参数实现的。
trigonometry_features: bool, default = False 当设置为True时,将基于数据集中数字特征中存在的所有三角组合创建新特征, 这些三角组合在 polynomial_degree 参数中定义。
三、分组特征
当数据集包含以某种方式相互关联的特征时,例如:以某个固定时间间隔记录的特征,则可以使用设置中的组特征参数从现有特征中创建一组此类特征的新统计特征,如平均值、中值、方差和标准差。
group_features: list or list of list, default = None
当数据集包含具有相关特征的特征时,可以使用分组特征参数进行统计特征提取。
例如,如果数据集具有相互关联的数字特征(即“Col1”、“Col2”、“Col3”),
则可以在分组特征下传递包含列名的列表,以提取统计信息,如平均值、中值、模式和标准差。
group_names: list, default = None
传递 group_features 时,可以将组的名称作为包含字符串的列表传递到 group_names 参数中。
分组名称列表的长度必须等于分组特征的长度。当长度不匹配或未传递名称时,将按顺序命名新特征,如group_1、group_2等。
四、分箱数字特征
特征分箱是一种利用预先定义的箱数将连续变量转化为分类值的方法。当连续特征的唯一值太多或极端值很少超出预期范围时,它是有效的。这样的极值会影响训练后的模型,从而影响模型的预测精度。在PyCaret中,可以使用设置中的 bin_numeric_features
参数将连续的数字特征组合成分箱。PyCaret使用“sturges”规则来确定箱体容器的数量,还使用 K-Means 聚类将连续的数字特征转换为分类特征。
bin_numeric_features: list, default = None 当传递一个数字特征列表时,它们将使用K-Means转换为分类特征, 其中每个bin中的值具有1D K-Means簇的最接近中心。 集群的数量是根据“sturges”方法确定的。 它只适用于高斯数据,并且低估了大型非高斯数据集的存储单元数。
五、合并稀有级别
有时,一个数据集可以有一个分类特征(或多个分类特征),具有非常高的级别(即高基数特征)。如果这样的特征(或特征)被编码成数值,那么得到的矩阵就是一个稀疏矩阵。这不仅使实验因特征数目和数据集大小的增加而变慢,而且在实验中引入了噪声。稀疏矩阵可以通过合并具有高基数的特征(或特征)中的罕见级别来避免。这可以在PyCaret中使用设置中的 combine_rare_levels
参数来实现。
combine_rare_levels: bool, default = False
如果设置为True,则在 rare_level_threshold 参数中定义的阈值以下的分类特征中的所有级别将合并为一个级别。
必须至少有两个级别低于阈值才能生效。 rare_level_threshold 代表能级频率的百分位分布。
一般来说,这项技术是用来限制由类别特征中的大量级别引起的稀疏矩阵。
rare_level_threshold: float, default = 0.1
百分位分布,低于百分位分布的稀有类别合并在一起。只有当“combine_rare_levels”设置为“True”时才生效。
特征选择
特征重要性是用于在数据集中选择在预测目标变量方面贡献最大的特征的过程。使用选定的特征而不是所有特征可以减少过度拟合的风险,提高准确性,并减少训练时间。在PyCaret中,这可以使用 feature_selection
参数来实现。它使用多种监督特征选择技术的组合来选择对建模最重要的特征子集。子集的大小可以通过设置中的 feature_selection_threshold
参数来控制。
feature_selection: bool, default = False 当设置为True时,使用各种排列重要性技术(包括随机林、Adaboost和与目标变量的线性相关)的组合来选择特征子集。 子集的大小取决于 feature_selection_param 参数。为了提高建模效率,通常采用约束特征空间的方法。 当使用 polynomial_features 和 feature_interaction 时,强烈建议使用较低的值定义 feature_selection_threshold 参数。 feature_selection_threshold: float, default = 0.8 用于特征选择的阈值(包括新创建的多项式特征)。值越大,特征空间越大。 建议在使用 polynomial_features 和 feature_interaction 的情况下, 使用不同的 feature_selection_threshold 进行多次试验。 设置一个非常低的值可能是有效的,但可能会导致欠拟合。
一、消除多重共线性
多重共线性(也称为共线性)是指数据集中的一个特征变量与同一数据集中的另一个特征变量高度线性相关的现象。多重共线性增加了系数的方差,从而使线性模型的系数变得不稳定和有噪声。处理多重共线性的一种方法是去掉彼此高度相关的两个特征之一。这可以在PyCaret中使用setup中的remove_multicollinearcity
参数来实现。
remove_multicollinearity: bool, default = False
当设置为True时,将丢弃相关性高于多重共线性阈值参数下定义的阈值的变量。
当两个特征高度相关时,与目标变量相关性较小的特征将被删除。
multicollinearity_threshold: float, default = 0.9
用于删除相关特征的阈值。只有当“remove_multicollinearity”设置为“True”时才生效。
二、主成分分析
主成分分析(PCA)是机器学习中用来降低数据维数的一种无监督技术。它通过识别一个子空间来压缩特征空间,该子空间捕获了完整特征矩阵中的大部分信息。它将原始特征空间投影到低维空间中。这可以在PyCaret中使用设置中的 pca
参数来实现。
pca: bool, default = False 如果设置为True,则使用 `pca_method` 参数中定义的方法将数据投影到低维空间中。 在有监督学习中,pca通常在处理高特征空间时执行,而内存是一个约束条件。 请注意,并非所有数据集都可以使用线性PCA技术有效地分解,并且应用PCA可能会导致信息丢失。 因此,建议使用不同的`pca_method` 进行多个实验来评估影响。 pca_method: string, default = ‘linear’ “linear”方法使用奇异值分解来执行线性降维。其他可用选项包括: kernel:利用RVF核进行降维。 incremental :当要分解的数据集太大而无法放入内存时,替换“线性”主成分分析 pca_components: int/float, default = 0.99 要保留的组件数。如果 pca_components 是一个浮点数,则将其视为信息保留的目标百分比。 当 pca_components 是整数时,它被视为要保留的特征数。 pca_components 必须严格小于数据集中的原始特征数。
三、忽略低方差
有时,一个数据集可能具有多个级别的分类特征,其中这些级别的分布是倾斜的,一个级别可能支配其他级别。这意味着这种特性提供的信息没有太大的变化。对于一个ML模型,这样的特性可能不会增加很多信息,因此在建模时可以忽略。这可以在PyCaret中使用设置中的 ignore_low_variance
参数来实现。要将特征视为低方差特征,必须满足以下两个条件。
1、特征/样本大小中唯一值的计数<10%
2、最常见值计数/第二常见值计数>20次。
ignore_low_variance: bool, default = False
当设置为True时,将从数据集中移除具有统计上不显著的差异的所有分类特征。
使用唯一值与样本数的比率以及最常用值与第二常用值的频率的比率来计算方差。