在对数据进行预处理时,怎样处理类别型特征?

简介: 在对数据进行预处理时,怎样处理类别型特征?

什么样的特征是类别型特征?

类别型特征主要是指性别(男/女),体型(胖/瘦/适中)等只有在选项内取值的特征,类别型特征的原始输入通常是字符串形式,除了决策树等少数模型能够直接处理字符串形式的输入,对于逻辑回归、支持向量机等模型来说,类别型特征必须经过处理转换成数值型特征才能正确工作。


序号编码

序号编码通常用于处理类别间具有大小关系的数据,例如考试的成绩可以由好到坏分为(A、B、C、D)四档,序号编码会把他们按照大小关系表示为(1、2、3、4),这样变换完了之后依然保持着大小的关系。

然而当一组数据之间不再具有大小关系的时候,如血型(A、B、AB、O)四个属性值之间是没有大小关系的(此时可以认为是几个平行关系的属性,甚至是几个完全抽象的无法理解的数据),这样的数据是不可以使用序号编码的,此时就产生了下面的方法——独热编码。


独热编码

还是以上面的血型(A、B、AB、O)为例,可以表示为:

A:[1,0,0,0]

B:[0,1,0,0]

AB:[0,0,1,0]

O:[0,0,0,1]


独热编码的两个问题:

  • 独热编码使用稀疏矩阵来节省空间,独热编码下特征向量只有某一维取值为1,其他的位置均取0,因此可以利用稀疏矩阵有效地节省空间,并且目前大部分算法都接受稀疏向量形式的输入。
  • 在KNN算法中,高维空间中的两点之间的距离很难衡量;在逻辑回归中参数的数量会随着维度的增高而增加,容易引起过拟合的问题;维度过大的时候我们可以通过特征选择来降低维度。


二进制编码

二进制编码先给每个类别赋予一个类别ID,然后再将ID对应的二进制编码作为结果。依然用血型的例子可以得到如下的结果:

image.png

相对于独热编码,二进制编码更加紧凑,节省存储空间。(效果未必更好)


统计编码

统计各类别在训练集中出现的频率,并将频率作为新的特征。

在某些情况下,具有统计意义的统计编码也是一种值得尝试的技巧。

相关文章
|
机器学习/深度学习 编解码 TensorFlow
RT-DETR改进策略【模型轻量化】| 替换骨干网络为EfficientNet v1 高效的移动倒置瓶颈结构
RT-DETR改进策略【模型轻量化】| 替换骨干网络为EfficientNet v1 高效的移动倒置瓶颈结构
675 0
RT-DETR改进策略【模型轻量化】| 替换骨干网络为EfficientNet v1 高效的移动倒置瓶颈结构
|
10月前
|
SQL 关系型数据库 MySQL
MySQL探索:详解WITH AS语法的使用。
总的来说,MySQL的 `WITH AS`语法就如同我们路途中的导航设备,能帮助我们更好地组织和简化查询, 增强了我们和数据沟通的能力,使得复杂问题变得可控且更有趣。不论是在森林深处,还是在数据的海洋中,都能找到自己想要的路途和方向。
1657 12
|
机器学习/深度学习 存储 编解码
YOLOv11改进策略【Neck】| ArXiv 2023,基于U - Net v2中的的高效特征融合模块:SDI(Semantics and Detail Infusion)
YOLOv11改进策略【Neck】| ArXiv 2023,基于U - Net v2中的的高效特征融合模块:SDI(Semantics and Detail Infusion)
550 7
YOLOv11改进策略【Neck】| ArXiv 2023,基于U - Net v2中的的高效特征融合模块:SDI(Semantics and Detail Infusion)
|
机器学习/深度学习 自然语言处理 算法
深度学习基础知识:介绍深度学习的发展历程、基本概念和主要应用
深度学习基础知识:介绍深度学习的发展历程、基本概念和主要应用
7259 0
|
缓存 算法 Java
刷算法,你应该知道的队列经典应用
文章介绍了队列的基本特性和经典应用,包括如何用队列实现栈、使用优先级队列解决Top K问题,并通过LeetCode题目示例展示了队列在算法实现中的应用。
刷算法,你应该知道的队列经典应用
用栈实现将一个十进制数值转换成八进制数值。即用该十进制数值除以8,并保留其余数;重复此操作,直到该十进制数值为0为止。最后将所有的余数反向输出就是所对应的八进制数值
这篇文章展示了如何使用栈(包括顺序栈和链栈)实现将十进制数值转换成八进制数值的方法,通过C语言编程演示了两种栈的实现方式和使用场景。
用栈实现将一个十进制数值转换成八进制数值。即用该十进制数值除以8,并保留其余数;重复此操作,直到该十进制数值为0为止。最后将所有的余数反向输出就是所对应的八进制数值
|
数据处理 Python
Pandas中的drop_duplicates()方法详解
Pandas中的drop_duplicates()方法详解
2106 2
|
监控 关系型数据库 MySQL
一次彻底讲清如何处理mysql 的死锁问题
【10月更文挑战第16天】本文详细介绍了如何处理 MySQL 中的死锁问题,涵盖死锁的概念、原因、检测方法及解决策略,强调通过优化事务设计、调整数据库参数、手动处理和预防措施等手段,有效减少死锁,提升数据库性能与稳定性。
2576 0
|
缓存 Unix 索引
Pandas中to_datetime()转换时间序列函数一文详解
Pandas中to_datetime()转换时间序列函数一文详解
4268 0
Pandas中to_datetime()转换时间序列函数一文详解
关于RoPE旋转位置编码的理解
关于RoPE旋转位置编码的理解
782 1

热门文章

最新文章