高基数类别特征预处理:平均数编码(目标编码)

2024-01-08 13:44

本文主要是介绍高基数类别特征预处理:平均数编码(目标编码),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

高基数类别特征预处理:平均数编码

参考:高基数类别特征预处理:平均数编码

1、引言

对于一个类别特征,如果这个特征的取值非常多,则称它为高基数(high-cardinality)类别特征。在深度学习场景中,对于类别特征我们一般采用Embedding的方式,通过预训练或直接训练的方式将类别特征值编码成向量。在经典机器学习场景中,对于有序类别特征,我们可以使用LabelEncoder进行编码处理,对于低基数无序类别特征(在lightgbm中,默认取值个数小于等于4的类别特征),可以采用OneHotEncoder的方式进行编码,但是对于高基数无序类别特征,若直接采用OneHotEncoder的方式编码,在目前效果比较好的GBDT、Xgboost、lightgbm等树模型中,会出现特征稀疏性的问题,造成维度灾难, 若先对类别取值进行聚类分组,然后再进行OneHot编码,虽然可以降低特征的维度,但是聚类分组过程需要借助较强的业务经验知识。本文介绍一种针对高基数无序类别特征非常有效的预处理方法:平均数编码(Mean Encoding)。在很多数据挖掘类竞赛中,有许多人使用这种方法取得了非常优异的成绩。

2、原理

平均数编码,有些地方也称之为目标编码(Target Encoding),是一种基于目标变量统计(Target Statistics)的有监督编码方式。该方法基于贝叶斯思想,用先验概率和后验概率的加权平均值作为类别特征值的编码值,适用于分类和回归场景。

如何工作:

假设你有一个分类特征和一个数值型目标变量。平均编码的步骤如下:

  1. 分组:对于每个类别,根据该类别分组数据。
  2. 计算平均值:计算每个类别对应的目标变量的平均值。
  3. 映射:将分类特征中的每个类别替换为其对应的平均目标值。

优点:

  • 效率高:平均编码可以显著减少数据的维度,特别是对于高基数的分类特征。
  • 性能提升:它通常可以提供更好的预测性能,因为它直接利用了目标变量的信息。
  • 简化模型:由于直接使用数值代替类别,模型可以更快地收敛。

缺点和风险:

  • 过拟合:平均编码极易导致过拟合,尤其是当某些类别的观察次数很少时。
  • 数据泄露:如果不正确实施,很容易引入来自测试集或验证集的信息,导致评估指标不准确。

防止过拟合的策略:

为了减少过拟合和数据泄露的风险,可以采取以下一些策略:

  1. 正则化引入平滑,当类别的观察次数较少时,通过将全局平均(整个数据集的目标平均)与类别平均混合来减少噪声。
  2. 交叉验证:使用嵌套的交叉验证方法,在每个训练折叠上独立地计算平均值,然后应用到验证折叠上。
  3. 分箱:如果某些类别观察次数很少,可以考虑将它们与其他相似的类别组合起来。
  4. 泛化处理:对于测试集中的新类别或很少见的类别,可以赋予全局平均或某种形式的估计值。

结论:

平均编码是一种强大的编码方式,适合那些与目标变量强相关的分类特征。然而,它需要仔细的实施和验证,以避免过拟合和数据泄露。适当时,结合其他防止过拟合的策略,可以在许多问题上取得优异的性能。

示例:

import pandas as pd
from category_encoders import TargetEncoderdf = pd.DataFrame({'cat': ['a', 'b', 'a', 'b', 'a', 'a', 'b', 'c', 'c', 'd'], 'target': [1, 0, 0, 1, 0, 0, 1, 1, 0, 1]})
te = TargetEncoder(cols=["cat"], min_samples_leaf=2, smoothing=1)
df["cat_encode"] = te.transform(df)["cat"]
print(df)
# 结果如下:cat	target	cat_encode
0	a	1	0.279801
1	b	0	0.621843
2	a	0	0.279801
3	b	1	0.621843
4	a	0	0.279801
5	a	0	0.279801
6	b	1	0.621843
7	c	1	0.500000
8	c	0	0.500000
9	d	1	0.634471

此外,测试集中出现训练集中未见的类别时,这被称为“冷启动”问题或“新类别”问题。对于目标编码来说,**一个简单的策略是将未见类别的编码设置为训练集目标变量的全局平均值。**这种方法简单,但可能不是最优的,尤其是当新类别和已知类别有很大不同的时候。

这篇关于高基数类别特征预处理:平均数编码(目标编码)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/583645

相关文章

烟火目标检测数据集 7800张 烟火检测 带标注 voc yolo

一个包含7800张带标注图像的数据集,专门用于烟火目标检测,是一个非常有价值的资源,尤其对于那些致力于公共安全、事件管理和烟花表演监控等领域的人士而言。下面是对此数据集的一个详细介绍: 数据集名称:烟火目标检测数据集 数据集规模: 图片数量:7800张类别:主要包含烟火类目标,可能还包括其他相关类别,如烟火发射装置、背景等。格式:图像文件通常为JPEG或PNG格式;标注文件可能为X

C++ | Leetcode C++题解之第393题UTF-8编码验证

题目: 题解: class Solution {public:static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num &

C语言 | Leetcode C语言题解之第393题UTF-8编码验证

题目: 题解: static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num & MASK1) == 0) {return

form表单提交编码的问题

浏览器在form提交后,会生成一个HTTP的头部信息"content-type",标准规定其形式为Content-type: application/x-www-form-urlencoded; charset=UTF-8        那么我们如果需要修改编码,不使用默认的,那么可以如下这样操作修改编码,来满足需求: hmtl代码:   <meta http-equiv="Conte

动手学深度学习【数据操作+数据预处理】

import osos.makedirs(os.path.join('.', 'data'), exist_ok=True)data_file = os.path.join('.', 'data', 'house_tiny.csv')with open(data_file, 'w') as f:f.write('NumRooms,Alley,Price\n') # 列名f.write('NA

OmniGlue论文详解(特征匹配)

OmniGlue论文详解(特征匹配) 摘要1. 引言2. 相关工作2.1. 广义局部特征匹配2.2. 稀疏可学习匹配2.3. 半稠密可学习匹配2.4. 与其他图像表示匹配 3. OmniGlue3.1. 模型概述3.2. OmniGlue 细节3.2.1. 特征提取3.2.2. 利用DINOv2构建图形。3.2.3. 信息传播与新的指导3.2.4. 匹配层和损失函数3.2.5. 与Super

[数据集][目标检测]血细胞检测数据集VOC+YOLO格式2757张4类别

数据集格式:Pascal VOC格式+YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):2757 标注数量(xml文件个数):2757 标注数量(txt文件个数):2757 标注类别数:4 标注类别名称:["Platelets","RBC","WBC","sickle cell"] 每个类别标注的框数:

对Powerdesigner中的Cardinality基数理解

原文链接:http://blog.sina.com.cn/s/blog_9bbafb790101bxwj.html 基数(Cardinality)用实体间实例的数值对应关系表示,它反映了两个实体间的数值联系,它从父实体的角度描述了一对实体间的数量维度,换句话说,基数中的数字是描述父实体在子表中可能出现的次数范围,基数实际是1个闭区间。基数可能是: (1)0,1 一个父实体,在子表中可能出现1

《计算机视觉工程师养成计划》 ·数字图像处理·数字图像处理特征·概述~

1 定义         从哲学角度看:特征是从事物当中抽象出来用于区别其他类别事物的属性集合,图像特征则是从图像中抽取出来用于区别其他类别图像的属性集合。         从获取方式看:图像特征是通过对图像进行测量或借助算法计算得到的一组表达特性集合的向量。 2 认识         有些特征是视觉直观感受到的自然特征,例如亮度、边缘轮廓、纹理、色彩等。         有些特征需要通

4-4.Andorid Camera 之简化编码模板(获取摄像头 ID、选择最优预览尺寸)

一、Camera 简化思路 在 Camera 的开发中,其实我们通常只关注打开相机、图像预览和关闭相机,其他的步骤我们不应该花费太多的精力 为此,应该提供一个工具类,它有处理相机的一些基本工具方法,包括获取摄像头 ID、选择最优预览尺寸以及打印相机参数信息 二、Camera 工具类 CameraIdResult.java public class CameraIdResult {