在 Sklearn 流水线中使用嵌套交叉验证进行目标编码

在机器学习领域,特征工程在提升模型性能方面扮演着至关重要的角色。其中一种常用的技术是目标编码,这对于处理分类变量特别有用。然而,如果不正确实施,可能会导致数据泄漏和过拟合。本文将深入探讨如何在 Sklearn 流水线中利用嵌套交叉验证(CV)来实现目标编码的复杂细节,从而确保我们构建稳健且无偏的模型评估。

目录

  • 理解目标编码
  • 数据泄漏的挑战:嵌套交叉验证(CV)
  • 在 Scikit-Learn 流水线中使用嵌套 CV 进行目标编码
  • 实际考量与最佳实践

理解目标编码

目标编码(Target encoding),也被称为均值编码,涉及将分类值替换为每个类别目标变量的均值。对于高基数的分类特征,当独热编码可能导致稀疏矩阵和过拟合时,这一技术显得尤为强大。尽管功能强大,但如果应用不当——尤其是当计算均值和训练模型使用相同的数据时——这种技术可能会导致过拟合。
目标编码的优势

  • 降维:与独热编码不同,目标编码减少了特征的数量,从而产生更紧凑的表示。
  • 处理高基数:对于具有许多唯一值的分类变量非常有效。
  • 潜在的性能提升:通过捕捉分类特征与目标变量之间的关系,它可以提高模型性能。

数据泄漏的挑战:嵌套交叉验证(CV)

目标编码的主要关注点之一是数据泄漏。如果在进行训练/测试集拆分之前对整个数据集进行编码,测试集的信息就会泄漏到训练过程中,从而导致过于乐观的性能估计。为了防止在交叉验证中使用目标编码时出现过拟合和数据泄漏,至关重要的是在每个交叉验证步骤中,仅在训练折上拟合编码器,并对训练折和验证折都进行转换。这种方法确保模型在训练期间不会接触到来自验证集的任何信息,这对于维护交叉验证过程的完整性至关重要。

  • 在每个交叉验证步骤中,必须在训练折上拟合编码器,而不是在验证折上,这是为了防止过拟合和数据泄漏。
  • 如果编码器在整个数据集(包括验证集)上拟合,可能会导致模型偏向于验证集,从而导致过拟合。

嵌套交叉验证是一种缓解数据泄漏并确保无偏模型评估的稳健技术。它涉及两层交叉验证:

  • 外层 CV:用于模型评估。
  • 内层 CV:用于超参数调优和特征工程,包括目标编码。

嵌套 CV 的优势

  • 防止数据泄漏: 通过将用于编码和模型训练的数据分离开来。
  • 可靠的性能估计: 提供对模型在未见数据上性能的更准确度量。

在 Scikit-Learn 流水线中使用嵌套 CV 进行目标编码

在利用嵌套 CV 的同时,在流水线中实施目标编码需要精心设计以避免数据泄漏。我们可以结合使用 Scikit-Learn 的 Pipeline 和 FeatureUnion 以及自定义转换器,以确保正确的目标编码,具体步骤如下:

  • 创建用于目标编码的自定义转换器: 该转换器应处理目标编码的拟合和转换。
  • 在流水线中集成转换器: 在 Scikit-Learn 流水线中包含自定义转换器。
  • 应用嵌套交叉验证: 使用嵌套 CV 来评估流水线内的模型。

让我们一步步演示如何在 Sklearn 流水线中使用嵌套交叉验证来实现目标编码。

步骤 1:导入必要的库并创建示例数据集

Python

`

import numpy as np
import pandas as pd
from sklearn.model_selection import KFold, cross_val_score, GridSearchCV
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import RandomForestClassifier
from category_encoders import TargetEncoder

# 示例数据集
data = {
    ‘category‘: [‘A‘, ‘B‘, ‘A‘, ‘C‘, ‘B‘, ‘A‘, ‘C‘, ‘C‘, ‘B‘, ‘A‘],
    ‘feature‘: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
    ‘target‘: [0, 1, 0, 1, 0, 1, 0, 1, 0, 1]
}
df = pd.DataFrame(data)
X = df[[‘category‘, ‘feature‘]]
y = df[‘target‘]
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/25317.html
点赞
0.00 平均评分 (0% 分数) - 0