计算机系统应用教程网站

网站首页 > 技术文章 正文

机器学习中的独热编码,你知道多少?

btikc 2024-10-12 13:22:25 技术文章 17 ℃ 0 评论

独热编码

独热编码是在机器学习中处理分类数据时常用的预处理技术。它有两个主要目的:

A) 将分类值转换为神经网络和回归等算法可以理解的数字向量。许多模型需要数字输入。

B) 以捕获其唯一性的方式表示分类值。如果没有独热编码,算法可能会错误地将不同的类别视为相同的值。

为了将像“颜色”这样的分类变量进行 3 个类别(红色、绿色、蓝色)的一次性编码,创建了 3 个新的数值特征:

  • 红色:如果颜色为红色,则为 1,否则为 0
  • 绿色:如果颜色为绿色,则为 1,否则为 0
  • 蓝色:如果颜色为蓝色,则为 1,否则为 0

所以“红色”变成 [1, 0, 0],“绿色”变成 [0, 1, 0],“蓝色”变成 [0, 0, 1]。注意事项

  1. 创建的新要素列数等于原始数据中不同类别的数量。因此,如果有 10 个不同的颜色值,则一个热编码将生成 10 个新列。
  2. 它可以大大扩展数据的维度。如果对多个分类变量进行单热编码,每个分类变量都具有许多可能的值,则要素总数可能会变得非常大。
  3. 对于具有逻辑顺序的类别(如“小”、“中”、“大”),序号编码是将值映射到整数(0、1、2)而不是二进制的替代方法。这提供了有关序号关系的详细信息。

Python 代码

1:使用 numpy,并且代码非常简单:

import numpy as np

colors = ['red', 'green', 'blue']

red = [1, 0, 0]
green = [0, 1, 0]
blue = [0, 0, 1]

print("Red encoding:", red)
print("Green encoding:", green)
print("Blue encoding:", blue)

这将输出以下内容:

Red encoding: [1, 0, 0]
Green encoding: [0, 1, 0]  
Blue encoding: [0, 0, 1]

2:使用 scikit-learn 库(这是首选方法):

import numpy as np
from sklearn.preprocessing import OneHotEncoder

colors = ['red', 'green', 'blue']
# reshape as 2D array
colors = np.array(colors).reshape(-1,1)  

encoder = OneHotEncoder(sparse_output=False)
encoded = encoder.fit_transform(colors)

print(encoded)

这将输出以下内容:

[[0. 0. 1.]
 [0. 1. 0.]
 [1. 0. 0.]]

其它

  • 独热编码在统计学中也称为“虚拟编码”。只有一个编码值是 1,其余的都是 0 或“假人”。
  • 虽然通用技术已经存在了几十年,但特定术语“独热编码”可能在 1980 年代/1990 年代的机器学习研究论文中逐渐出现,然后在 2000 年代获得更广泛的普及。但最初的铸币者尚不清楚。它现在已成为标准术语。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表