one-hot独热编码

到目前为止,表示分类变量最常用的方法就是使用one-hot编码N取一编码 ,也叫虚拟变量。虚拟变量背后的思想是将一个分类变量替换为一个或多个新特征,新特征取值为0或1.对于线性二分类(以及scikit-learn中其他所有模型)的公式而言,0和1这两个值是有意义的,我们可以像这样对每个类别引入一个新特征,从而表示任意数量的类别。

一、独热编码出现之前:针对无序离散的分类特征,机器学习算法的分类器并不能直接进行数据处理。因为,分类器通常处理的数据是连续且有序的。

但是我们可以对这些离散的特征数据建立映射表来让其有序并且连续起来。例如:针对一个人对象,我们可以假设其属性进行了如下映射。

性别特征:

"男","女"\] =\> 0,1 =\>二维 居住地特征: \["北京","上海,"深圳"\] =\> 0,1,2 =\>三维 职业特征: \["演员","老师","公务员","工程师","消防员"\] =\> 0,1,2,3,4 =\> 五维 此时,针对样本A(女,北京,老师)=\>(1,0,2)先进行特征映射,然后采用独热编码使其转化成有序且连续。 二、如何处理数据: 1. 什么是独热编码? 独热编码(One-Hot Encoding),又称一位有效编码,其方法是使用N位状态寄存器来对N个状态进行编码,每个状态都有它独立的寄存器位,并且在任意时候,其中只有一位有效。即,只有一位是1,其余都是零值。独热编码 是利用0和1表示一些参数,使用N位状态寄存器来对N个状态进行编码。 例如,对六个状态进行编码: 自然顺序码为 000,001,010,011,100,101 独热编码则是 000001,000010,000100,001000,010000,100000 回到一开始的例子,性别特征:\["男","女"\],按照N位状态寄存器来对N个状态进行编码的原理: 性别特征:\["男","女"\](这里N=2 二维数据) 男 =\> 10 女 =\> 01 地区特征:\["北京","上海,"深圳"\](这里N=3,三维数据): 北京 =\> 100 上海 =\> 010 深圳 =\> 001 工作特征:\["演员","厨师","公务员","工程师","律师"\](这里N=5,五维数据): 演员 =\> 10000 老师 =\> 01000 公务员 =\> 00100 工程师 =\> 00010 消防员 =\> 00001 所以,样本A的特征是\["女","北京","工程师"\]的时候,独热编码(One-Hot Encoding)的结果为: \[0,1,1,0,0,0,0,0,1,0

  1. 优点

在回归,分类,聚类等机器学习算法中,特征之间距离的计算或相似度的计算是非常重要的。而常用的距离或相似度的计算都是在欧式空间的相似度计算,计算余弦相似性,基于的就是欧式空间。

使用独热编码(One-Hot Encoding),将离散特征的取值扩展到了欧式空间,离散特征的某个取值就对应欧式空间的某个点。将离散型特征使用独热编码(One-Hot Encoding),会让特征之间的距离计算更加合理。

独热编码的优点为:

1.能够处理非连续型数值特征。

2.在一定程度上也扩充了特征。比如性别本身是一个特征,经过one hot编码以后,就变成了男或女两个特征。

特征类别较多时,数据经过独热编码可能会变得过于稀疏。

参考:独热编码(One-Hot Encoding)介绍及实现_天空下的斌的博客-CSDN博客_独热码表

数据处理------One-Hot Encoding_zhiyong_will的博客-CSDN博客

独热编码(One-Hot Encoding)-andy杨

三、 sklearn Python 代码实现

python 复制代码
from sklearn import preprocessing
  
encoder = preprocessing.OneHotEncoder()
# 4个特征:
 
#第一个特征(即为第一列)为[0,1,2,1],其中三类特征值[0,1,2],因此One-Hot Code可将[0,1,2]表示为:[100,010,001]
#第一个特征有三种值:采用三个编码:[100,010,001]
#同理第二个特征列可将两类特征值[2,3]表示为[10,01]
#第三个特征将4类特征值[1,2,4,5]表示为[1000,0100,0010,0001]
#第四个特征将2类特征值[3,12]表示为[10,01]
 
encoder.fit([
    [0, 2, 1, 12],
    [1, 3, 5, 3],
    [2, 3, 2, 12],
    [1, 2, 4, 3]
])
encoded_vector = encoder.transform([[2, 3, 5, 3]]).toarray()
print("\n Encoded vector =", encoded_vector)
#[[0. 0. 1.    0. 1.      0. 0. 0. 1.     1. 0.]]
相关推荐
_OP_CHEN1 分钟前
【Python基础】(二)从 0 到 1 入门 Python 语法基础:从表达式到运算符的全面指南
开发语言·python
l1t2 分钟前
利用小米mimo为精确覆盖矩形问题C程序添加打乱函数求出更大的解
c语言·开发语言·javascript·人工智能·算法
weixin_398187752 分钟前
YOLOv11 轻量级移动端网络ShuffleNetV2集成指南(详注)
人工智能·yolo
_Li.5 分钟前
机器学习-贝叶斯公式
人工智能·机器学习·概率论
brave and determined5 分钟前
CANN训练营 学习(day7)昇腾AI训练全流程实战:从模型迁移到性能优化的深度指南
pytorch·ai·ai训练·昇腾ai·msprobe·模型性能调优·训练配置
luoganttcc8 分钟前
详细分析一下 国富论里里面 十一章 关于白银价格的 论述
人工智能
我命由我1234510 分钟前
Python Flask 开发:在 Flask 中返回字符串时,浏览器将其作为 HTML 解析
服务器·开发语言·后端·python·flask·html·学习方法
拾忆,想起13 分钟前
设计模式:软件开发的可复用武功秘籍
开发语言·python·算法·微服务·设计模式·性能优化·服务发现
哥布林学者17 分钟前
吴恩达深度学习课程四:计算机视觉 第二周:经典网络结构 课后习题和代码实践
深度学习·ai
GEO AI搜索优化助手18 分钟前
生态震荡——当“摘要”成为终点,知识价值链的重塑与博弈
人工智能·搜索引擎·生成式引擎优化·ai优化·geo搜索优化