One-Hot编码

one-hot编码

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

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

假设我们有一群学生,他们可以通过四个特征来形容,分别是:

  • 性别:[“男”,“女”]
  • 年级:[“初一”,“初二”,“初三”]
  • 学校:[“一中”,“二中”,“三中”,“四中”]

这时候就可以用one-hot编码的形式来表示了,采用N位状态寄存器来对N个状态进行编码

在这里插入图片描述

例如:小明->[男,初二,三中] 转化成数字表示为[0 1 2]—>one-hot编码表示为 [1 0 0 1 0 0 0 1 0]

from sklearn import preprocessing
enc = preprocessing.OneHotEncoder()
# 这里一共有4个数据,3种特征
enc.fit([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]])
# 这里使用一个新的数据来测试
array = enc.transform([[0, 1, 3]]).toarray()
# [[ 1  0  0  1  0  0  0  0  1]]
print(array)

列出矩阵,可以表示为4个数据,3种特征

image-20230226130304436

竖着看,可以看出第一种特征中只有0、1两类,第二组有0,、1、2三类,第三种有0、1、2、3四类,因此分别可以用2、3、4个状态类来表示。

N=210, 01
N=3100, 010, 001
N=41000, 0100, 0010, 0001
# enc.transform() 就是将[0,1,3]这组特征转换成one hot编码
# toarray()则是转成数组形式

第一个数为0,对应第一种特征则为 1 0;

第二个数为1,对应第二种特征则为 0 1 0;

第三个数为3,对应第三种特征则为 0 0 0 1。

所以最后的输出为 [[1 0 0 1 0 0 0 0 1]]:

拿小明的例子[0, 1, 2]测试结果为:[[1 0 0 1 0 0 0 1 0]]

image-20230226131200124

缺陷:不考虑词与词之间的顺序,且得到的特征是离散稀疏的。one-hot编码向量是垂直的,在向量空间中无法表示近似关系。

例如将世界上所有的城市名作为语料库:

吉林 [0,0,0,0,0,0,0,1,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,1,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
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值