我们经常看到在进行数据预处理时,会将数据集中不具备序列行、不能比较大小、离散取值的类别属性转换为One-Hot编码,为了对这一预处理操作有大致的了解,多方查阅,总结为以下笔记。
What is One-Hot?
One-Hot编码,中文一般翻译为“独热”编码、“一位有效”编码。
One-Hot编码操作通常被解释为:一种将数据集类别变量的一般格式转换为机器学习算法易于接收和处理的编码形式的过程。
例如,某所学校统计学生的信息数据集如下:
| 家庭经济状况 | 综合表现评估 | |
|---|---|---|
| 01 | 富裕 | 优秀 |
| 02 | 小康 | 良好 |
| 03 | 温饱 | 合格 |
| 04 | 贫困 | 优秀 |
这种格式对于机器学习算法不够好,可以通过One-Hot编码将其转换为如下格式:
| 富裕 | 小康 | 温饱 | 贫困 | 优秀 | 良好 | 合格 | |
|---|---|---|---|---|---|---|---|
| 01 | 1 | 0 | 0 | 0 | 1 | 0 | 0 |
| 02 | 0 | 1 | 0 | 0 | 0 | 1 | 0 |
| 03 | 0 | 0 | 1 | 0 | 0 | 0 | 1 |
| 04 | 0 | 0 | 0 | 1 | 1 | 0 | 0 |
针对这种离散的类别标签,格式B摆脱了多种不同意义的特征,将其全部转换成二进制取值,让机器学校更容易理解和使用。
Why do we need One-Hot?
既然离散的,具有不同现实意义的,不能比较大小且不具备次序的类别属性不能直接被机器学习模型所使用,那么为什么不能直接将这些类别用数字编号,而是需要分裂成多个二值属性呢?
这是应为,如果我们直接把格式A的数据集编码格式转成如下格式C:
| 家庭经济状况 | 综合表现评估 | |
|---|---|---|
| 01 | 1 | 1 |
| 02 | 2 | 2 |
| 03 | 3 | 3 |
| 04 | 4 | 1 |
那么,这些特征就会被分类器认为是有序的,是可以比较大小甚至使用加减乘除等数学计算的,这相当于人为地赋予了离散无序无大小关系的特征属性连续、有序、有大小关系可计算的性质,实际上是引入的人工误差。
How can we use One-Hot?
将离散类别特征,如表中的家庭经济情况分裂成:是否富裕、是否小康、是否温饱、是否贫困四个二值特征,组成一个长度为4二进制向量,并填上对应的“0或1”,“1”表示是,“0”表示不是。 各个离散特征均分裂成一维二进制向量,并拼接成一个更长的一维二进制向量即可。
Talk is cheap, show the code!