数据准备
缺失值
由于各种原因,数据集可能包含缺失值或空记录,通常编码为空白或 NaN
。大多数机器学习算法无法处理缺失或空白的值。移除含有缺失值的样本是一种有时会使用的基本策略,但这会带来丢失可能有价值的数据以及相关信息或模式的代价。一个更好的策略是填补缺失值。
参数
imputation_type: string, default = 'simple' 要使用的填补类型。可以是
simple
或iterative
。如果为 None,则不执行缺失值填补。numeric_imputation: int, float, or string, default = ‘mean’ 数值列的填补策略。当
imputation_type= iterative
时忽略。选择项:drop: 丢弃包含缺失值的行。
mean: 使用列的均值填补。
median: 使用列的中位数填补。
mode: 使用最频繁的值填补。
knn: 使用 K-近邻方法填补。
int or float: 使用提供的数值填补。
categorical_imputation: string, default = ‘mode’ 分类列的填补策略。当
imputation_type= iterative
时忽略。选择项:drop: 丢弃包含缺失值的行。
mode: 使用最频繁的值填补。
str: 使用提供的字符串填补。
iterative_imputation_iters: int, default = 5 迭代次数。当
imputation_type=simple
时忽略。numeric_iterative_imputer: str or sklearn estimator, default = 'lightgbm' 用于对数值特征中的缺失值进行迭代填补的回归器。如果为 None,则使用 LGBClassifier。当
imputation_type=simple
时忽略。categorical_iterative_imputer: str or sklearn estimator, default = 'lightgbm' 用于对分类特征中的缺失值进行迭代填补的回归器。如果为 None,则使用 LGBClassifier。当
imputation_type=simple
时忽略。
示例
之前
之后
Simple 填补器与 Iterative 填补器的比较
要了解更多关于此实验的信息,请阅读这篇文章。
数据类型
数据集中的每个特征都关联有数据类型,例如数值、分类或日期时间。PyCaret 的推断算法会自动检测每个特征的数据类型。然而,有时 PyCaret 推断的数据类型不正确。确保数据类型正确很重要,因为许多下游过程都依赖于特征的数据类型。例如,数据集中的数值和分类特征的缺失值填补方式不同。要覆盖推断的数据类型,可以在 setup 函数中使用 numeric_features
、categorical_features
和 date_features
参数。你还可以使用 ignore_features
在模型训练时忽略某些特征。
参数
numeric_features: list of string, default = None 如果推断的数据类型不正确,可以使用
numeric_features
来覆盖推断的数据类型。categorical_features: list of string, default = None 如果推断的数据类型不正确,可以使用
categorical_features
来覆盖推断的数据类型。date_features: list of string, default = None 如果数据包含在运行 setup 时未自动推断出的
Datetime
列,可以使用date_features
强制指定数据类型。它可以处理多个日期列。与日期时间相关的特征不用于建模。相反,会执行特征提取,并在模型训练期间忽略原始Datetime
列。如果Datetime
列包含时间戳,也会提取与时间相关的特征。create_date_columns: list of str, default = ["day", "month", "year"]
从日期特征创建的列。注意,方差为零的创建特征(例如,仅包含日期的列中的小时特征)将被忽略。允许的值是
pandas.Series.dt
中的 datetime 属性。特征的日期时间格式会从第一个非 NaN 值中自动推断。text_features: list of str, default = None 包含文本语料库的列名。如果为 None,则不选择任何文本特征。
text_features_method: str, default = 'tf-idf' 用于在数据集中嵌入文本特征的方法。选择 'bow' (词袋模型 -
CountVectorizer
) 或 'tf-idf' (TfidfVectorizer
)。请注意,转换器的稀疏矩阵输出在内部会被转换为完整数组。这对于大型文本嵌入可能会导致内存问题。ignore_features: list of string, default = None
ignore_features
可用于在模型训练期间忽略特征。它接受一个字符串列表,包含要忽略的列名。keep_features: list of str, default = None
keep_features
参数可用于在预处理期间始终保留特定的特征,即这些特征永远不会被任何类型的特征选择丢弃。它接受一个字符串列表,包含要保留的列名。
示例 1 - 分类特征
之前
之后
示例 2 - 忽略特征
之前
之后
One-Hot 编码
数据集中的分类特征包含标签值(有序或名义),而不是连续数字。大多数机器学习算法不能直接处理分类特征,在训练模型之前必须将其转换为数值。最常见的分类编码类型是 One-Hot Encoding(也称为独热编码),其中每个分类级别在数据集中变成一个单独的特征,包含二进制值(1 或 0)。
由于这是执行机器学习实验的必要步骤,PyCaret 将使用独热编码转换数据集中的所有分类特征。这对于具有名义分类数据(即数据无法排序)的特征来说是理想的。在其他不同场景下,必须使用其他编码方法。例如,当数据是有序的(即数据具有内在级别)时,必须使用有序编码 。独热编码适用于所有被推断为分类特征或在 setup 函数中使用 categorical_features
强制指定为分类特征的特征。
参数
max_encoding_ohe: int, default = 25 唯一值数量小于或等于
max_encoding_ohe
的分类列使用 OneHotEncoding 进行编码。如果多于此数量,则使用encoding method
估计器。请注意,恰好包含两个类别的列始终进行有序编码。设置为小于 0 将始终使用 OneHotEncoding。encoding_method: category-encoders estimator, default = None 一个
category-encoders
估计器,用于对唯一值数量多于max_encoding_ohe
的分类列进行编码。如果为 None,则默认使用category_encoders.leave_one_out.LeaveOneOutEncoder
。
之前
之后
有序编码
当数据集中的分类特征包含具有内在自然顺序的变量时,例如低、中、高,必须对其进行不同于名义变量(例如男性或女性,没有内在顺序)的编码。这可以通过在 setup 函数中使用 ordinal_features
参数来实现,该参数接受一个字典,其中包含特征名称和按从低到高递增顺序排列的级别。
参数
ordinal_features: dictionary, default = None 当数据包含有序特征时,必须使用
ordinal_features
以不同的方式对其进行编码。如果数据有一个分类变量,其值为low
、medium
、high
,并且已知 low < medium < high,则可以将其作为ordinal_features = { 'column_name' : ['low', 'medium', 'high'] }
传递。列表顺序必须按从低到高递增。
示例
之前
目标不平衡
当训练数据集的目标类别分布不均衡时,可以使用 setup 函数中的 fix_imbalance
参数进行修复。当设置为 True
时,默认使用 SMOTE(合成少数类别过采样技术)作为重采样方法。可以通过 setup 中的 fix_imbalance_method
参数更改重采样方法。
参数
fix_imbalance: bool, default = False 当设置为
True
时,训练数据集将使用fix_imbalance_method
中定义的算法进行重采样。当为None
时,默认使用 SMOTE。fix_imbalance_method: str or imblearn estimator, default = 'SMOTE' 用于执行类别均衡的估计器。从
imblearn
估计器的名称或其自定义实例中选择。当fix_imbalance=False
时忽略。
示例
SMOTE 之前和之后
移除异常值
PyCaret 中的 remove_outliers
函数允许你在训练模型之前识别并移除数据集中的异常值。异常值通过使用奇异值分解技术的 PCA 线性降维来识别。这可以通过 setup 中的 remove_outliers
参数实现。异常值的比例由 outliers_threshold
参数控制。
参数
remove_outliers: bool, default = False 当设置为 True 时,将使用 Isolation Forest 从训练数据中移除异常值。
outliers_method: str, default = 'iforest' 移除异常值的方法。当
remove_outliers=False
时忽略。可能的值有:'iforest': 使用 sklearn 的 IsolationForest。
'ee': 使用 sklearn 的 EllipticEnvelope。
'lof': 使用 sklearn 的 LocalOutlierFactor。
outliers_threshold: float, default = 0.05 要从数据集中移除的异常值的百分比。当
remove_outliers=False
时忽略。
示例
移除异常值之前和之后
最后更新
这有帮助吗?