在接下来的课程中,我们将介绍两种处理类别特征的方法,本文重点讲解独热编码。
独热编码主要用于处理那些没有大小关系的类别特征,例如性别和血型。以血型为例,因为独热编码只有四个类别,我们可以使用一个四维向量来表示。具体来说,A型血表示为(1,0,0,0),B型血表示为(0,1,0,0),AB型血表示为(0,0,1,0),O型血表示为(0,0,0,1)。这样,我们就能通过独热编码来表示这些血型。
尽管独热编码有其优势,但也存在一些问题。首先,对于具有多个类别的特征,需要使用高维度的向量来表示。例如,如果有10000个不同的类别,那么向量也会变成10000维,其中只有一个维度为1。这样的向量通常是稀疏的,这可能导致模型参数过多,进而引发过拟合的问题。
此外,在自然语言处理领域,独热编码的维度往往与词汇表的大小有关。当词汇表非常大时,每个单词都可以用一个高维向量来表示。然而,独热编码无法区分单词间的相似性,也无法表示它们的位置关系。
在构建词汇表时,没有必要包含所有的单词。我们可以选择主要的一些单词,其余的单词可以用一个特殊的符号(如UNK)来表示。哑编码与独热编码的主要区别在于,哑编码会去除一个类别位。例如,我们可以用(1,0,0)表示A型血,(0,1,0)表示B型血,(0,0,1)表示AB型血,而O型血则用(0,0,0)表示。这样,通过三个类别位就可以完成表示。
优点: - 解决了分类器难以处理离散数据的问题; - 在一定程度上增加了特征的数量,有助于模型的泛化。
缺点: - 在文本特征表示方面存在明显不足。首先,它忽略了词语之间的顺序;其次,它假定词语之间是相互独立的;最后,它生成的特征是稀疏的,无法计算不同词语之间的相似度。