这是深度学习500问系列笔记之一,帮助我深入记忆知识,如有不足,随时欢迎交流和探讨。
问题由来
在很多机器学习任务中,特征并不总是连续值,而有可能是分类值。
例如,考虑以下的三个特征:
["male","female"]
["from Europe","from US","from Asia"]
["use Firefox","uses Chrome","uses Safari","uses Internet Explorer"]
如果将上述特征用数字表示,效率会高很多。例如:
["male","from US","uses Internet Explorer"]表示为[0,1,3]
["female","from Asia","uses Chrome"]表示为[1,2,1]
但是,即使转换为数字表示后,上述数据也不能直接用在我们的分类器中。因为,分类器往往默认数据是连续的(可以计算距离?)并且是有序的(而上面这个0并不是说比1要高级)。但是, 我们上述的表示,数字并不是有序的,而是随机分配的。
One-Hot Encodeing (独热编码)
为了解决上述问题,其中一种可能的解决办法就是采用One-Hot Encodeing (独热编码)。独热编码即One-Hot编码,又称一位有效编码,其方法是使用N位状态寄存器来对N个状态进行编码,每个状态都由他独立的寄存器位,并且在任意时候,其中只有一位有效。
例如:
自然状态码为:000,001,010,011,100,101
独热编码为:000001,000010,000100,001000,010000,100000
可以这样理解,对于每一个特征,如果它有m个可能值,那么经过独热编码后,就变成了m个二元特征(如成绩这个特征有好,中,差变成one-hot就是100,010,001)。并且,这些特征互斥,每次只有一个激活。因此,数据会变成稀疏的。
这样做的好处主要有: 解决了分类器不好处理属性数据的问题; 在一定程度上也起到了扩充特征的作用。