机器学习的几个疑难杂症点(4)——变量编码方式(LabelEncoder、one-hot Encoding、dummy Encoding)

文章目录

  • 一、LabelEncoder 编码方式
    • 对文本:
    • 对不连续数字:
  • 二、one-hot Encoding (独热编码)
  • 三、dummy Encding(哑编码)
  • 四、总结
  • 参考文档

一、LabelEncoder 编码方式

LabelEncoder是对不连续的数字或文本编号。

对文本:

LabelEncoder可以将[中国,美国,日本]转化为[0,1,2],但这样会出现一个问题:中国和日本的平均会等于日本。 决策树、随机森林算法等可以直接处理这样的类别类型特征,并且这种方法使用的特征空间很少。

对不连续数字:

举例如下:

# -*- coding: utf-8 -*-
  2 from sklearn.preprocessing import LabelEncoder
  3 le = LabelEncoder().fit([1,111,122,188,999])
  4 le_transform = le.transform([999,122,111])
  5 print(le_transform)
  6 """
  7 [4 2 1]
  8 """

总结:
对文字的编码会出现一些其他的问题,需要引入参数处理,应用相对较少。对不连续数字可以进行自动的比较大小的排序编码。

二、one-hot Encoding (独热编码)

one-hot的基本思想:将离散型特征的每一种取值都看成一种状态,若你的这一特征中有N个不相同的取值,那么我们就可以将该特征抽象成N种不同的状态,one-hot编码保证了每一个取值只会使得一种状态处于“激活态”,也就是说这N种状态中只有一个状态位值为1,其他状态位都是0。举个例子,假设我们以学历为例,我们想要研究的类别为小学、中学、大学、硕士、博士五种类别,我们使用one-hot对其编码就会得到:
机器学习的几个疑难杂症点(4)——变量编码方式(LabelEncoder、one-hot Encoding、dummy Encoding)_第1张图片

三、dummy Encding(哑编码)

哑变量编码直观的解释就是任意的将一个状态位去除。还是拿上面的例子来说,我们用4个状态位就足够反应上述5个类别的信息,也就是我们仅仅使用前四个状态位 [0,0,0,0] 就可以表达博士了。只是因为对于一个我们研究的样本,他已不是小学生、也不是中学生、也不是大学生、又不是研究生,那么我们就可以默认他是博士,是不是。(额,当然他现实生活也可能上幼儿园,但是我们统计的样本中他并不是,-)。所以,我们用哑变量编码可以将上述5类表示成:
机器学习的几个疑难杂症点(4)——变量编码方式(LabelEncoder、one-hot Encoding、dummy Encoding)_第2张图片

四、总结

Label Encoder 处理文本信息时会存在两个量之间的数值问题。而one-hot Encoding或dummy Encoding 只有特征化的0,1两个状态,大部分算法是基于向量空间中的度量来进行计算的,为了使非偏序关系的变量取值不具有偏序性,并且到圆点是等距的。使用one-hot编码,将离散特征的取值扩展到了欧式空间,离散特征的某个取值就对应欧式空间的某个点。将离散型特征使用one-hot编码,会让特征之间的距离计算更加合理。离散特征进行one-hot编码后,编码后的特征,其实每一维度的特征都可以看做是连续的特征。

参考文档

https://blog.csdn.net/App_12062011/article/details/83684463
https://blog.csdn.net/A1712372902/article/details/84449175
https://blog.csdn.net/weixin_42587745/article/details/82831172
https://blog.csdn.net/weixin_41712499/article/details/82657296

你可能感兴趣的:(机器学习算法)