pycaret学习之数据准备
一、缺失值处理
由于各种原因,数据集可能有丢失的值或空记录,通常编码为空或NaN,删除缺少值的样本是一种基本策略,有时会用到,但它会带来丢失可能有价值的数据和相关信息或模式的代价。一个更好的策略是估算缺失的值。默认情况下,PyCaret按数字特征的“平均值”和分类特征的“常量”输入数据集中缺少的值。要更改插补方法,可以在设置中使用 numeric_imputation
和 categorical_imputation
参数。
numeric_imputation: string, default = ‘mean’
如果在数字特征中发现缺失值,则将用特征的平均值进行估算。
另一个可用的选项是“median”,它使用训练数据集中的中值来估算值。
categorical_imputation: string, default = ‘constant’
如果在分类特征中发现缺失的值,则将使用常量“not_available”值进行估算。
另一个可用的选项是“mode”,
它使用训练数据集中最频繁的值来估算缺失的值。
二、更改数据类型
数据集中的每个要素都有一个关联的数据类型,如数字要素、分类要素或日期时间要素。PyCaret的推理算法自动检测每个特征的数据类型。但是,有时PyCaret推断的数据类型是不正确的。确保数据类型正确非常重要,因为几个下游过程取决于特征的数据类型,例如:数字特征和分类特征的缺失值插补应分别执行。要覆盖推断的数据类型,可以在安装程序中传递数值特征、分类特征和日期特征参数。
numeric_features: string, default = None
如果推断的数据类型不正确,则可以使用数值特征覆盖推断的类型。
如果在运行安装程序时,“column1”的类型被推断为类别而不是数字,
则可以使用此参数通过传递 numeric_features=['column1'] 来覆盖。
categorical_features: string, default = None
如果推断的数据类型不正确,则可以使用分类特征覆盖推断的类型。
如果在运行安装程序时“column1”的类型被推断为数值而不是类别,
则可以使用此参数通过传递 categorical_features=['column1'] 覆盖该类型。
date_features: string, default = None
如果数据有一个在运行安装程序时未自动检测到的DateTime列,
则可以通过传递 date_features='date_column_name' 来使用此参数。
它可以处理多个日期列。建模中不使用日期列。
相反,将执行特征提取,并从数据集中删除日期列。
如果日期列包含时间戳,则还将提取与时间相关的特征。
ignore_features: string, default = None
如果建模时应忽略任何特征,则可以将其传递给参数 ignore_features。
当推断出ID和DateTime列时,将自动设置为忽略以进行建模。
三、独热编码
机器学习算法不能直接处理分类数据,必须在训练模型之前将其转换为数值。最常见的分类编码类型是独热编码(也称为伪编码),其中每个分类级别成为包含二进制值(1或0)的数据集中的单独特征。由于这是执行ML实验的必要步骤,PyCaret将使用独热编码转换数据集中的所有分类特征。这对于具有名义分类数据(即数据无法排序)的特征非常理想。在其他不同的情况下,必须使用其他编码方法。例如,当数据是序数,即数据具有内在级别时,必须使用序数编码。独热编码可用于所有特征,这些特征要么被推断为分类特征,要么被强制使用设置中的 categorical_features
参数作为分类特征。
四、序数编码
当数据集中的分类特征包含具有内在自然顺序的变量(如低、中、高)时,这些变量的编码必须不同于名义变量(如男性或女性没有内在顺序)。这可以在PyCaret中使用setup中的 ordinal_features
参数来实现,该参数接受一个字典,其特征名称和级别按从低到高的顺序递增。
ordinal_features: dictionary, default = None 当数据包含序数特征时,必须使用序数特征参数对它们进行不同的编码。 如果数据具有值为“low”、“medium”、“high”的分类变量, 并且已知low<medium<high,则可以将其作为 ordinal_features = { ‘column_name’ : [‘low’, ‘medium’, ‘high’] } 传递。 列表序列必须按从低到高的顺序递增。
五、基数编码
当数据集中的分类特征包含多个级别的变量(也称为高基数特征)时,典型的独热编码会导致创建大量新特征,从而使实验变慢,并为某些机器学习算法引入可能的噪声。在PyCaret中,可以使用设置中的 high-cardinality-Features
参数处理具有高基数的特性。它支持两种基数编码方法,即基于频率/计数的方法和聚类方法。这些方法可以在setup中的 high_cardinality_method
参数中定义。
high_cardinality_features: string, default = None
当数据包含具有高基数的特性时,可以通过将其作为具有高基数的列名列表传递来将其压缩为较少的级别。
使用 high_cardinality_method param 中定义的方法压缩特征。
high_cardinality_method: string, default = ‘frequency’
当方法设置为“frequency”时,它将用频率分布替换特征的原始值,并将特征转换为数值。
另一种可行的方法是“clustering”,它对数据的统计属性进行聚类,并用聚类标签代替特征的原始值。
使用Calinski-Harabasz和 Silhouette 准则的组合来确定簇的数量。
六、处理未知级别
当未观察到的数据在分类特征上有新的层次,而这些层次在训练模型时是不存在的,这可能会导致训练算法在生成准确预测时出现问题。处理这些数据点的一种方法是将它们重新分配到已知的分类特征级别,即训练数据集中已知的级别。这可以在PyCaret中使用handle_unknown_categorical
参数来实现,该参数默认设置为True。它支持两种方法“least_frequent”和“most_frequent”,可以在设置中使用未知的分类方法参数进行控制。
handle_unknown_categorical: bool, default = True 当设置为True时,新数据/未显示数据中的未知分类级别将替换为在训练数据中学习到的最频繁或最不频繁级别。 方法是在 unknown_categorical_method 参数下定义的。 unknown_categorical_method: string, default = ‘least_frequent’ 用于替换未显示数据中未知类别级别的方法。方法可以设置为“‘least_frequent”或“most_frequent”。