文章目录
- one-hot encoding(独热编码)
- dummy variable(哑变量)
我们在用模型去解决机器学习问题的时候,要提前进行“特征工程”。而特征工程中很重要的就是对特征的预处理。分类变量是另一类常见的变量,用于表示类别或标记。与数值变量不同的是,分类变量的值是不能被排序的,所以也称无序变量。分类变量处理的核心是如何编码类别。最简单的方式就是使用正整数编码类别,但是这样就使得类别之间有了顺序,相当于是引入了额外的特征信息,是不允许的。
例如著名的Kaggle泰坦尼克生还预测这个比赛中,乘客从哪里上船(Embarked)这个变量就是类别型变量。这三个登船点两两之间的相关度应该是一样的,即S地区和C地区,与S地区与Q地区的相关度应该一样,这样就意味着如果我给Embarked变量用Embarked=1来表示乘客在S地区上船,Embarked=2表示乘客在Q地区上船,Embarked=3表示乘客在C地区上船,这样就会认为S与Q的“距离”比S和C之间的距离更近,所以这样编码是不合理的。
正因如此,我们引入了离散型变量的编码方式——one-hot(独热编码)与dummy variable(哑变量)
one-hot encoding(独热编码)
one-hot编码(独热编码)用一个比特位表示一种可能的编码。一般每个变量只属于一个类别,所以只有一个比特位是1,这就是‘独热‘’这个词的由来。
独热编码的基本思想:将类别特征进行表示一个最好的办法就是使用一组比特位来表达。每一位代表一个可能的类别。 如果该变量不能一次成为多个类别,那么该组中只有一位可以是1。 这被称为独热编码, 每个位都是一个特征。 因此是一个绝对的具有k个可能类别的变量被编码为长度为k的特征向量。
我们以5个城市为例,我们想要使用one-hot对其进行编码,以下表示对五个城市进行编码:
独热编码的问题是,使用的比特位比实际所需多一位,因为所有位都为0这个编码没有被使用。
因为有且只有一个比特位是1,各比特位bn表示,则有b1+b2+…+bn=1。这是一个线性关系,而线性相关的特征有个缺点,会导致训练出的模型不唯一,特征的不同线性组合可以做出相同的预测。
dummy variable(哑变量)
哑变量编码直观的解释就是任意的将一个状态位去除。那对于以上五个城市的例子,我们可以只用4个状态位来表示5个变量。也就是说对于Hawaii这个城市,我们可以用全零来表示,即 。只拿以上5个城市来说,如果不是前四个,那么就一定是Hawaii。
以下是对5个城市的哑变量表示:
哑变量编码没有了冗余,但是也损失了独热编码具有的直观性。直观和冗余有时候是矛盾。