前言
神经网路中一个常见的题目就是要做「分类」,而如何将类别资讯(Categorical Data)转换成数值资讯(Numerical Data)让模型能够理解,进而执行训练,就要来探讨如何对资料进行编码(Encoding)。
网路上已经有其他写得满清楚的部落格文章,可以直接参考(皆附程式码):
初学Python手记#3-资料前处理( Label encoding、 One hot encoding)Day03 Pandas DataFrame, Label Encoding and One Hot Encoding. Pandas基本资料类型、标籤编码与独热编码这边仅简单做个白话的整理和比较,也可以直接看最后Take Home Message的部分。
编码 (Encoding)
常用的方式主要有以下两种方法:
Integer Encoding(标籤编码)One-Hot Encoding(独热编码)1. Integer Encoding
将类别变量利用一位来呈现。不同类别,分别有对应的一个整数。
2. One-Hot Encoding
将类别变量用二进制的向量来呈现。有n类,向量长度就是n维。属于该类的话就注记1、不属于就注记0。
Take Home Message
针对三个类别来举例的话:
Integer Encoding会这样转换:
金牌 > 1
银牌 > 2
铜牌 > 3
(可以留意一下,金银铜牌这三类是「有序类别变量」,类别之间具有顺序关係)
One-Hot Encoding会这样转换:
红色 > 1 0 0
绿色 > 0 1 0
蓝色 > 0 0 1
两种方式使用时机的差异在于:
Integer Encoding会让模型学习到「顺序关係」,也就是有大小之分。而当类别之间不存在优劣、前后、高低之分的时候,也就是「无序」,就适合採用 One-Hot Encoding。但相对地,因为维度提高了,就会较费时且占用较多的空间。如果有任何问题欢迎留言讨论,文中错误的地方还请不吝指正,谢谢!
References
Why One-Hot Encode Data in Machine Learning?