专栏名称: 奇舞精选
《奇舞精选》是由奇舞团维护的前端技术公众号。除周五外,每天向大家推荐一篇前端相关技术文章,每周五向大家推送汇总周刊内容。
目录
相关文章推荐
算法爱好者  ·  一 90 后程序员杀入 A 股,进场四天亏 ... ·  2 天前  
算法与数据结构  ·  开源 9 年后,词频数据库 ... ·  4 天前  
九章算法  ·  开课了!零基础8周拿ds/da ... ·  4 天前  
九章算法  ·  某大厂开始“捡漏”L5+码农了 ·  6 天前  
九章算法  ·  第一批用GPT的人,已经出成果了 ·  1 周前  
51好读  ›  专栏  ›  奇舞精选

机器学习中的 One-Hot 编码

奇舞精选  · 公众号  · 算法  · 2024-10-16 18:43

正文

在机器学习中,我们常常需要处理数据,而数据往往是以不同的形式存在的。其中,分类数据(categorical data)是一种常见的类型,例如颜色(红、蓝、绿)、城市(北京、上海、广州)等。为了让机器学习模型理解这些分类数据,我们需要将它们转换成数值形式。这时,One-Hot 编码(独热编码)就是一个非常有效的方法。

什么是 One-Hot 编码?

One-Hot 编码是一种将分类变量转换为数值形式的方法。它的基本思路是:对于每一个类别,创建一个新的二进制特征(0或1)。具体来说,如果某个类别存在,就用1表示,如果不存在,就用0表示。

为什么要使用One-Hot编码?

One hot 编码进行数据的分类更准确,许多机器学习算法无法直接用于数据分类。数据的类别必须转换成数字,对于分类的输入和输出变量都是一样的。

我们可以直接使用整数编码,需要时重新调整。这可能适用于在类别之间存在自然关系的问题,例如温度“冷”(0)和”热“(1)的标签。

当没有关系时,可能会出现问题,一个例子可能是标签的“狗”和“猫”。

在这些情况下,我们想让网络更具表现力,为每个可能的标签值提供概率式数字。这有助于进行问题网络建模。当输出变量使用one-hot编码时,它可以提供比单个标签更准确的一组预测。

消除顺序关系:某些机器学习模型(如线性回归)会将输入的数字看作有顺序的,而One-Hot编码消除了这种误解。例如,数字1(红)和数字2(蓝)之间的关系在某些情况下可能被模型误解为蓝色比红色更大或更小,而One-Hot编码则避免了这种情况。

适应多种模型:许多机器学习模型(如决策树、神经网络等)都能很好地处理One-Hot编码后的数据。

不需要使用one-hot编码来处理的情况

将离散型特征进行one-hot编码的作用,是为了让距离计算更合理,但如果特征是离散的,并且不用one-hot编码就可以很合理的计算出距离,那么就没必要进行one-hot编码。

比如,该离散特征共有1000个取值,我们分成两组,分别是400和600,两个小组之间的距离有合适的定义,组内的距离也有合适的定义,那就没必要用one-hot 编码。

离散特征进行one-hot编码后,编码后的特征,其实每一维度的特征都可以看做是连续的特征。就可以跟对连续型特征的归一化方法一样,对每一维特征进行归一化。比如归一化到[-1,1]或归一化到均值为0,方差为1

举个例子

假设我们有一个简单的分类变量“颜色”,它有三个可能的值:红、蓝、绿。我们可以用 One-Hot 编码将其转换为数值形式:

颜色绿
100
010
绿001

在这个例子中,每种颜色都被转换成了一个向量,其中只有一个位置是1,其他位置都是0。这种方式使得机器学习模型能够理解每个类别之间的关系。

如何在 Python 中实现 One-Hot 编码?

在 Python 中,我们可以使用 pandas 库来轻松实现 One-Hot 编码。以下是一个简单的示例:

import pandas as pd

# 创建一个简单的 DataFrame
data = {'颜色': ['红''蓝''绿''红''蓝']}
df = pd.DataFrame(data)

# 使用 get_dummies 函数进行 One-Hot 编码
one_hot_encoded = pd.get_dummies(df, columns=['颜色'])

print(one_hot_encoded)

运行后,你会得到如下输出:

   颜色_蓝  颜色_绿  颜色_红
0 0 0 1
1 1 0 0
2 0 1 0
3 0 0 1
4 1 0 0

注意事项

  • 维度膨胀:对于类别数非常多的特征,One-Hot 编码可能会导致数据维度急剧增加,造成计算效率降低和模型过拟合。这种情况下,可以考虑其他编码方式,如目标编码(Target Encoding)。
  • 稀疏矩阵:当使用 One-Hot 编码后,数据中会出现大量的0,这可能导致数据的稀疏性。可以使用稀疏矩阵来优化存储和计算。

总结

One-Hot 编码是机器学习中处理分类数据的常用方法。它能够有效地将类别转换为机器学习模型可以理解的数值形式。在处理小规模的分类特征时,One-Hot 编码非常有效,但在面对大量类别时,需要谨慎考虑。


- END -

如果您关注前端+AI 相关领域可以扫码进群交流


 


添加小编微信进群😊


关于奇舞团

奇舞团是 360 集团最大的大前端团队,非常重视人才培养,有工程师、讲师、翻译官、业务接口人、团队 Leader 等多种发展方向供员工选择,并辅以提供相应的技术力、专业力、通用力、领导力等培训课程。奇舞团以开放和求贤的心态欢迎各种优秀人才关注和加入奇舞团。