详细详解One Hot编码-附代码

机器学习算法无法直接用于数据分类。数据分类必须转换为数字才能进一步进行。

在本教程中,你将发现如何将输入或输出的序列数据转换为一种热编码,以便于你在Python中深度学习的序列分类问题中使用。
本教程分为4部分:

1.什么是One-Hot编码?

2.手动编写One-Hot编码

3.One-Hot Encode with scikit-learn.

4.One-Hot Encode with Keras.

1.什么是One-Hot编码?

One-Hot编码,又称为一位有效编码,主要是采用N位状态寄存器来对N个状态进行编码,每个状态都由他独立的寄存器位,并且在任意时候只有一位有效。

One-Hot编码是分类变量作为二进制向量的表示。这首先要求将分类值映射到整数值。然后,每个整数值被表示为二进制向量,除了整数的索引之外,它都是零值,它被标记为1。

2.One-Hot编码的工作示例

让我们用一个小例子来说明一下到底什么是One-Hot编码。假设我们有一个带有’red’和’green’值的标签序列。我们可以将’red’的整数值分配为0,’green’的整数值为1。只要我们总是将这些数字分配给这些标签,这称为整数编码。一致性是重要的,所以我们可以稍后反转编码,并从整数值获取标签。

接下来,我们可以创建一个二进制向量来表示每个整数值。对于2个可能的整数值,向量的长度为2。

编码为0的“红色”标签将用二进制向量[1,0]表示,其中第0个索引被标记为值1。然后,编码为1的“绿色”标签将用一个二进制向量[0,1],其中第一个索引被标记为1。

如果我们有序列:

red’,‘red’,‘green’。

我们可以用整数编码来表示它:

001

而One-Hot编码就为:

1           2      3
[1, 0] [1, 0] [0, 1]

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

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

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

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

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

2.手动One Hot编码:

在这个例子中,我们将假设我们有一个字符串的例子,但是示例序列并不涵盖所有可能的例子。

我们将使用以下字符的输入序列:

Hello world

我们将假设所有可能输入是小写字母和空格的完整字母表。因此,我们将以此展示如何滚动我们自己的one hot编码。

完整的示例如下所示。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
from  numpy  import  argmax

# define input string
data  =   'hello world'
print ( data )
# define universe of possible input values
alphabet  =   'abcdefghijklmnopqrstuvwxyz '
# define a mapping of chars to integers
char_to_int  =   dict ( ( c ,  i )   for  i ,  c  in   enumerate ( alphabet ) )
int_to_char  =   dict ( ( i ,  c )   for  i ,  c  in   enumerate ( alphabet ) )

# integer encode input data
integer_encoded  =   [ char_to_int [ char ]   for   char   in  data ]
print ( integer_encoded )

# one hot encode
onehot_encoded  =   list ( )

for  value  in  integer_encoded :
    letter  =   [ 0   for  _  in   range ( len ( alphabet ) ) ]
    letter [ value ]   =   1
    onehot_encoded . append ( letter )
     print ( onehot_encoded )
     # invert encoding
    inverted  =  int_to_char [ argmax ( onehot_encoded [ 0 ] ) ]
     print ( inverted )

运行示例首先打印输入字符串。运行结果:

u@u-VirtualBox:~$ python onehot.py
hello world
[7, 4, 11, 11, 14, 26, 22, 14, 17, 11, 3]
[[0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]
h
[[0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]
h
[[0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]
h
[[0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0
  • 20
    点赞
  • 98
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
fast-lio-localization 是一个基于激光雷达的定位算法,它的核心思想是将激光雷达数据转化为一些特征,并根据这些特征进行定位。下面是 fast-lio-localization 的代码详解: 1. 读取激光雷达数据 首先,在 main 函数中我们需要读取激光雷达数据。fast-lio-localization 支持多种不同类型的激光雷达,包括 Velodyne HDL-32E、Velodyne VLP-16、Hokuyo UTM-30LX 和 Sick LMS200。 2. 预处理激光雷达数据 预处理激光雷达数据是 fast-lio-localization 的一个重要步骤。在这个步骤中,我们需要将激光雷达数据转化为一些特征。这些特征包括: - 点云:将激光雷达数据转化为点云,便于后续处理。 - 点云滤波:对点云进行滤波,去除一些噪声点。 - 特征提取:从点云中提取一些特征,如角点和平面点。 3. 初始化粒子滤波器 fast-lio-localization 使用粒子滤波器来进行定位。在初始化粒子滤波器时,我们需要设置一些参数,如粒子数量、初始位置和方向等。 4. 运行粒子滤波器 在运行粒子滤波器时,我们需要执行以下步骤: - 根据当前机器人的运动模型,对粒子进行预测。 - 使用激光雷达数据和地图,计算每个粒子的权重。 - 根据粒子的权重,重新采样粒子。 5. 输出定位结果 在粒子滤波器运行完毕后,我们可以得到一些最终的粒子。通过对这些粒子的统计分析,我们可以得到机器人的位置和方向,并输出定位结果。 以上就是 fast-lio-localization 的代码详解。需要注意的是,fast-lio-localization 是一个比较复杂的算法,需要对激光雷达数据和粒子滤波器等知识有一定的了解才能深入理解它的实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值