one-hot code 独热编码
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了one-hot code 独热编码相关的知识,希望对你有一定的参考价值。
参考技术A 最近在使用mlxtend,里面有个一开始没理解这个one-hot是啥,看了下文知道,就是True-False形式的数据,那种0、1 的格式。
one-hot code 又称为1位有效编码
这个一般在机器学习中提到的比较多,在数据预处理的过程中使用较多,一般特征值使用0、1来表示会方便很多,而且效率高。
像性别,一般有男、女,转为one-hot,就是[10,01],如果再加上个未知,那就是[100,010,001]
感觉这里需要注意的就是将所有的特征值转换为0,1,有几个特征值,就转换为几位编码。
这里也不介绍啥复杂高深的机器学习概念了,我也还没掌握呢,记录下这么个方法,以后会用到的。在pandas中好像也有方法可以转换,等我学习下,再过来分享。
补充
独热编码(one-hot coding)
参考技术A 1 为什么需要独热编码?直接上案例,一份数据,特征为["颜色", "尺码", "喜欢度", "类别"],具体数据为[['green','M', 10.1,'class1'], ['red','L', 13.5,'class2'], ['blue','XL', 15.3,'class1']]。
这几项中,喜欢度直接是数值型,不用管。类别是label,先不说。对于颜色与尺码这两项,应该如何编码?
先说尺码,尺码的编码形式应该是"M": 1, "L": 2, "XL": 3,直接转换成数字的形式。那么颜色这一项是否可行?直接将颜色字段编码为"green":1, "red": 2, "blue": 3,这样似乎否可行?
先上结论,这样不行。我们在模型训练的时候,会对特征做什么?无非就是计算距离。那现在计算green,red,blue三个的距离。d(green, red)=2-1=1,d(red, blue)=3-2=1,d(green, blue)= 3-1=2。问题来了,这几个颜色之间的差距,应该是一样的。都是不同的颜色,不应该映射到欧氏空间,距离不等。这就是这种编码的问题所在。颜色这个离散特征之间没有大小的意义,应该使用独热编码。
那么型号这个字段可以吗?回答是可以的。同样计算距离。d(M,L)=2-1=1,d(L, XL)=3-2=1,d(M,XL)=3-1=2。XL是真的比M大两号的。当离散特征的取值有大小的意义,就应该使用这种数值映射。
2 独热编码现成的包
现成的包有不少,我就说一个,这个简单,能用就行了。pandas自带了独热编码的方法,get_dummies()。用起来很简单。还是以上边的例子。
3 独热编码的优缺点
以上是关于one-hot code 独热编码的主要内容,如果未能解决你的问题,请参考以下文章
独热编码(one-hot)是什么?什么数据类型需要进行独热编码?pandas如何进行独热编码(one-hot)?
独热编码(One-Hot Encoding)和 LabelEncoder标签编码 区别 数据预处理:(机器学习) sklearn