精通特征工程(五)分类变量:自动化时代的数据计数

#此篇为学习笔记,部分资料、图片来源 图灵程序设计丛书 《精通特征工程》阿曼达 .卡萨丽、爱丽丝.郑 著

分类变量是用来表示类别或标记的

分类变量是不能被排序的。它们又被称为无序变量

如果一个类别(如一个单词)在一个数据点(文档)中出现多吃,就可以将它表示为一个计数,并通过计数统计表示所有类别。这种方式称为分箱计数

分类变量的编码

one-hot编码

One-Hot编码是一种在机器学习中常用的数据预处理技术,主要用于将分类变量转换为机器学习算法可以理解的数值形式。这种编码方式通常用于处理名义型(无序)和二元变量。

在One-Hot编码中,每个分类变量的类别都会被转换成一个新的二进制列或特征。如果某行数据属于该类别,则对应的新特征值为1;如果不属于,则为0。这种方法可以避免给类别赋予任何数值顺序或大小的意义,这对于名义型变量尤其重要。

例如,假设我们有一个名为"color"的特征,它有三个可能的值:Red, Green 和 Blue。使用One-Hot编码后,这个特征会被转换成三个新的二进制特征:"color_Red", "color_Green" 和 "color_Blue"。如果某行数据的颜色是红色,那么"color_Red"的值为1,而"color_Green"和"color_Blue"的值都为0。

需要注意的是,当一个分类变量有n个不同的类别时,使用One-Hot编码会生成n个新特征,这可能会导致数据集的维度显著增加,特别是在类别数量较多的情况下。为了避免多重共线性问题,有时会选择丢弃一个类别,即进行“Dummy Variable Trap”处理,只保留n-1个特征。

在Python中,可以使用pandas库的get_dummies()函数或者sklearn库的OneHotEncoder类来进行One-Hot编码。

虚拟编码

虚拟编码(Dummy Encoding),也称为一位有效编码(One and Zero-hot encoding),是One-Hot编码的一个变体,主要用于解决多重共线性问题。在虚拟编码中,对于具有n个不同类别的分类变量,我们只创建n-1个二进制(0或1)的虚拟变量,而不是像标准One-Hot编码那样创建n个。

虚拟编码的基本原理是利用n-1个虚拟变量来表示n个类别。例如,如果有三个类别A、B和C,在虚拟编码中,我们可以创建两个虚拟变量V1和V2,其中V1用来区分A和非A,V2用来区分B和非B。通过这两个变量的不同组合,就可以唯一地表示出三个类别:

  • 类别A:V1=1, V2=0
  • 类别B:V1=0, V2=1
  • 类别C:V1=0, V2=0

这种方法避免了所谓的“虚拟变量陷阱”(Dummy Variable Trap),即由于所有n个虚拟变量之间存在完全的线性依赖关系,导致模型中出现多重共线性的问题。在统计学和机器学习模型中,多重共线性可能会导致系数估计不稳定,影响模型的解释性和预测能力。

在实际应用中,当处理分类变量时,通常推荐使用虚拟编码,尤其是当你使用线性回归、逻辑回归等对多重共线性敏感的模型时。在Python中,可以通过Pandas的get_dummies()函数设置drop_first=True参数来实现虚拟编码,或者使用Scikit-Learn中的OneHotEncoder并设置drop='first'参数。

效果编码

效果编码(Effect Coding),也被称为偏差编码(Deviation Coding)、对比编码(Contrast Coding)或ANOVA编码,是一种用于编码分类变量的技术,主要用于统计建模,特别是在分析方差(ANOVA)和多元回归分析中。与虚拟编码(Dummy Coding)和One-Hot编码相比,效果编码提供了一种不同的视角来处理分类变量,它强调的是每个类别相对于整体平均值(或基准组)的效果或差异。

在效果编码中,对于具有n个类别的分类变量,同样会创建n-1个虚拟变量。但是,这些虚拟变量的取值方式与虚拟编码不同。在效果编码中,每个虚拟变量的取值不仅包括0和1,还包括-1。具体来说:

  • 基准类别的虚拟变量取值全为-1/n,其中n是该类别在样本中的数量。
  • 非基准类别的虚拟变量在对应类别上取值为(n-1)/n,而在其他非基准类别上取值为-1/n。

这样的编码方式使得每个虚拟变量的平均值为0,这有助于模型更好地估计每个类别对响应变量的影响程度,而不仅仅是与某个特定参考类别的相对差异。效果编码可以提供更直观的模型参数解释,因为模型的截距项(常数项)代表了所有类别的平均响应值,而每个虚拟变量的系数则表示了相应类别对平均响应值的偏差。

在实践中,效果编码有助于避免虚拟变量陷阱,并且在某些情况下,它可能比虚拟编码提供更简洁、更有解释性的模型。在Python的Pandas库中,可以通过pd.get_dummies()函数结合自定义编码器或在模型拟合过程中使用统计包(如Statsmodels)的公式接口指定编码类型来实现效果编码。

当然,让我们通过一个具体的例子来理解效果编码(Effect Coding)是如何工作的。假设我们有一个分类变量“颜色”,它有三个类别:红色(Red)、绿色(Green)、蓝色(Blue)。我们的目标是研究颜色如何影响人们选择某种产品(例如,一种饮料)的概率。

在这个例子中,我们将采用效果编码来处理“颜色”这个分类变量。以下是效果编码的具体步骤:

1. **确定类别数量**:颜色变量有3个类别,因此我们将创建2个虚拟变量(n - 1 = 3 - 1 = 2)。

2. **选择基准类别**:我们可以任意选择一个作为基准,这里我们选择蓝色(Blue)作为基准类别。

3. **计算编码值**:
   - 对于非基准类别(红色和绿色):
     - 在它们各自的虚拟变量中,取值为 (n-1)/n = (3-1)/3 = 2/3。
     - 在另一个虚拟变量中,以及在所有非自身类别的观察中,取值为 -1/n = -1/3。
   - 对于基准类别(蓝色):
     - 在所有虚拟变量中,取值为 -1/n = -1/3。

4. **构建编码矩阵**:
   - 红色的编码向量为 [2/3, -1/3]。
   - 绿色的编码向量为 [-1/3, 2/3]。
   - 蓝色的编码向量为 [-1/3, -1/3]。

现在,如果我们有一组数据如下所示:

| 观测 | 颜色 |
|------|------|
| 1    | 红色 |
| 2    | 绿色 |
| 3    | 蓝色 |
| 4    | 红色 |
| 5    | 红色 |

使用效果编码,我们可以将其转换为:

| 观测 | Red  | Green |
|------|------|-------|
| 1    | 2/3  | -1/3  |
| 2    | -1/3 | 2/3   |
| 3    | -1/3 | -1/3  |
| 4    | 2/3  | -1/3  |
| 5    | 2/3  | -1/3  |

这样,在进行统计建模时,模型的截距项将会估计所有颜色的平均概率,而每个虚拟变量的系数则表示对应颜色与平均概率的偏差。例如,如果红色的虚拟变量系数为正,则意味着红色产品被选择的概率高于所有颜色的平均概率;若为负,则意味着低于平均概率。

这就是效果编码的一个基本示例,它帮助我们在模型中比较每个类别的效应,同时保持模型的简洁性和解释性。

各种分类编码的优缺点

独热编码(One-Hot Encoding)

  • 优点:
    • 直观且易于理解。
    • 避免了类别之间的虚假数值关系。
  • 缺点:
    • 导致数据维度显著增加,特别是在类别数量众多的情况下,可能引起“维数灾难”。
    • 不适合于内存有限或需要高效数据处理的情况。

 

 效果编码(Effect Coding)或偏差编码(Deviation Coding)

  • 优点:
    • 提供了关于类别相对于整体均值的信息,有助于解读模型系数。
    • 减少了独热编码带来的维度问题。
  • 缺点:
    • 实现稍微复杂一些,不如独热编码直观。
    • 需要选择一个参考类别,这可能会影响模型的解释

处理大型分类变量

特征散列化

散列函数是一种确定性函数,它可以将一个可能无界的整数映射到一个有限的整数范围[1,m]中。

因为输入域可能大于输出范围,所以有可能多个值被映射为同样的输出,这称为碰撞 。

均匀散列函数可以确保将大致相同数量的数值映射到m个分箱中。

特征散列化对计算能力大有好处,但牺牲了直观的用户可解释性。 

分箱计数

分箱计数的思想:它不使用分类变量的值作为特征,而是使用目标变量取这个值的条件概率

分箱计数将一个分类变量转换成与其值相关的统计量,它可以将一个大型的、稀疏的、二值的分类变量表示(如one-hot编码生成的结果)转换成一个小巧的、密集的、实数型的数值表示。

如何处理稀有类

back-off 将所有稀有类的计数累加到一个特殊分箱中的简单计数

 

防止数据泄露

统计量中包含目标变量,而它正是模型视图去预测的。使用输出去计算输入特征会导致一个非常严重的问题,那就是数据泄露。

数据泄露会使模型包含一些不该拥有的信息,这些信息可以使模型获得某种不现实的优势,从而做出更加精确的预测。

1.严格隔离计数收集

2.基于差分隐私的解决方案

无界计数

在最简单的层面上,无界计数意味着一个计数器可以无限增长,没有固定的上限或边界。这种类型的计数在处理大数据集或实时流数据时特别重要。

解决方案包括:

归一化处理:将计数器的值按比例缩放,使其保持在一定范围内。

边界设置:虽然称为“无界”,但实际上可能会设定软性或硬性的上限,超过这个上限后采取其他策略,如滚动平均或丢弃旧数据。

数据压缩:在存储历史数据时,采用数据压缩技术来减少存储需求。

数据采样:在数据流处理中,可能只记录部分样本,而不是所有事件,从而控制数据量的增长

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值