One-Hot 编码

本文详细介绍了One-Hot编码的概念及应用,通过实例演示如何将分类变量转换为二进制向量,便于机器学习算法处理。同时展示了使用sklearn库中的OneHotEncoder实现One-Hot编码的具体步骤。
摘要由CSDN通过智能技术生成

0. 前言

对于 One-Hot 编码 这个概念,经常被提及,但 One-Hot 编码 到底是什么?下面将对此进行总结。

1. 什么是 One-Hot 编码 ?

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

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

上面算是官方的对于该术语的定义,但好像并不是特别清楚,还是举例说明吧!

2. One-Hot 编码示例

下面将会通过一些实际的例子来说明一下,对于上面的解释,其实 One-Hot 编码 也可称为 One of N encoding

  • 假设对于学生的性别【男,女】进行编码
    根据上面的官方概念,采用 N 位状态寄存器对 N 个状态进行编码,这里的特征有2个,也就是 N = 2,所以可以有下面的表示方式:
    → \rightarrow [1, 0] ;
    → \rightarrow [0, 1] ;

  • 假设对于学生的年级【小学,初中,高中】进行编码
    如上,可以有如下表示:
    小学 → \rightarrow [1, 0, 0] ;
    初中 → \rightarrow [0, 1, 0] ;
    高中 → \rightarrow [0, 0, 1] ;

  • 假设对于学生的特长【钢琴,绘画,舞蹈,篮球】进行编码
    如上,可以有如下表示:
    钢琴 → \rightarrow [1, 0, 0, 0,] ;
    绘画 → \rightarrow [0, 1, 0, 0] ;
    舞蹈 → \rightarrow [0, 0, 1, 0] ;
    篮球 → \rightarrow [0, 0, 0, 1] ;

那么,如果是这样的一个样本 【男,初中,篮球】,就可以这么表示:[1, 0, 0, 1, 0, 0, 0, 0, 1] 。

3. sklearn 中的 OneHotEncoder

from sklearn.preprocessing import OneHotEncoder
# 模拟的训练数据
X = [[0, 0, 2],
     [1, 2, 3],
     [1, 1, 0],
     [0, 0, 1]
     ]
enc = OneHotEncoder(sparse=False)
enc.fit(X)
# 测试数据
x_test = [[1, 0, 2]]
result = enc.transform(x_test)
print(result)

输出结果:

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

上述代码中的有4个训练数据,特征数为3,对应上边的例子,训练数据的第一列都为 0 1 1 0,即对应学生的性别特征【男,女】;第二列 0 2 1 0 正好对应年级特征 【小学,初中,高中】;第三列 2 3 0 1 则正好对应特长这一特征【钢琴,绘画,舞蹈,篮球】;训练数据1:0, 0, 2 表示【男,小学,舞蹈】,其余类似;测试数据 1, 0, 2 表示【女,小学,舞蹈】,我们根据 2 中的示例,可以计算出 One-Hot 编码为:[0, 1, 1, 0, 0, 0, 0, 1, 0],跟代码运行出的编码也是一致的。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值