本文目录导读:
原理、计算与区别
图片来源于网络,如有侵权联系删除
一、独热编码(One - Hot Encoding)
(一)原理
独热编码是一种将分类变量转换为机器学习算法能够处理的数值形式的编码方式,它的基本思想是针对分类变量的每个类别创建一个新的二进制特征,如果一个分类变量有n
个类别,那么经过独热编码后就会产生n
个新的特征。
(二)计算示例
假设我们有一个包含颜色分类的变量,它有三个类别:红色(Red)、绿色(Green)、蓝色(Blue),我们要对这个变量进行独热编码。
1、创建三个新的特征列,分别对应红色、绿色和蓝色。
- 当原始数据中的颜色为红色时,红色特征列的值为1,绿色和蓝色特征列的值为0。
- 若颜色为绿色,则绿色特征列的值为1,红色和蓝色特征列的值为0。
- 要是颜色为蓝色,蓝色特征列的值为1,红色和绿色特征列的值为0。
我们有以下颜色数据:[Red, Green, Blue, Red],经过独热编码后会变成如下矩阵:
Red | Green | Blue |
1 | 0 | 0 |
0 | 1 | 0 |
0 | 0 | 1 |
1 | 0 | 0 |
在实际应用中,如果使用Python的pandas
库和sklearn
库来进行独热编码会更加方便,以下是一个简单的代码示例:
import pandas as pd from sklearn.preprocessing import OneHotEncoder data = pd.DataFrame({'Color': ['Red', 'Green', 'Blue', 'Red']}) encoder = OneHotEncoder(sparse=False) encoded_data = encoder.fit_transform(data[['Color']]) new_columns = encoder.get_feature_names(['Color']) encoded_df = pd.DataFrame(encoded_data, columns=new_columns) print(encoded_df)
(三)独热编码的特点
1、优点
- 简单直观:容易理解和实现,能够清晰地表示分类变量的各个类别。
- 适用于大多数机器学习算法:许多算法(如线性回归、神经网络等)要求输入数据为数值型,独热编码能够很好地满足这一要求。
2、缺点
- 产生高维稀疏数据:如果分类变量的类别数量很多,经过独热编码后会产生大量的新特征,导致数据维度增加,并且大多数值为0(稀疏性),这可能会增加计算成本,并且在某些算法中可能会导致过拟合。
- 丢失了类别之间的顺序信息:独热编码将每个类别视为独立的,不考虑类别之间可能存在的顺序关系,对于表示教育程度(小学、中学、大学)的分类变量,独热编码没有体现出这种顺序。
二、分布式编码(Distributional Encoding)
(一)原理
分布式编码是一种基于概率分布来表示数据的编码方式,它不像独热编码那样简单地用二进制来表示类别,而是考虑了数据在不同类别中的分布情况,对于一个单词在语料库中的表示,可以根据它在不同文档中的出现频率等信息构建一个分布式的表示向量。
图片来源于网络,如有侵权联系删除
(二)计算示例(以词向量的分布式编码为例)
假设我们有一个简单的语料库,包含三个句子:“I like cat”,“I like dog”,“I like fish”。
1、构建词汇表:{I, like, cat, dog, fish}。
2、我们可以使用一种简单的计数方法来构建词向量,对于单词“cat”,我们统计它在每个句子中的出现次数,得到一个向量[1, 0, 0](因为“cat”只在第一个句子中出现),对于单词“like”,得到向量[1, 1, 1]。
在实际的分布式编码中,如Word2Vec等算法会使用更复杂的方法,这些算法会考虑单词的上下文信息,通过神经网络模型来学习单词的分布式表示,在Skip - gram模型中:
- 输入一个中心单词,模型试图预测它周围的单词。
- 在训练过程中,模型的隐藏层权重会逐渐调整,最终得到每个单词的分布式向量表示,假设我们经过训练得到了单词“cat”的向量表示为[0.1, 0.2, - 0.3],“dog”的向量表示为[0.2, 0.1, - 0.2]等,这些向量表示不仅仅是简单的计数结果,而是反映了单词之间的语义关系,语义相似的单词(如“cat”和“dog”)在向量空间中的距离会比较近。
(三)分布式编码的特点
1、优点
- 能够捕捉数据之间的语义关系:在自然语言处理等领域,分布式编码可以有效地表示单词之间的语义相似性,这对于文本分类、机器翻译等任务非常有帮助。
- 数据表示相对紧凑:相比于独热编码,分布式编码产生的向量维度可以根据需要进行调整,并且能够在一定程度上压缩数据表示,避免了高维稀疏的问题。
2、缺点
- 计算复杂:尤其是在训练大规模数据时,像Word2Vec这样的分布式编码算法需要大量的计算资源和时间。
- 模型依赖:分布式编码的质量很大程度上依赖于所使用的模型和训练数据,如果模型选择不当或者训练数据不充分,可能会得到不准确的分布式表示。
独热编码和分布式编码的区别
(一)数据表示形式
1、独热编码
- 以二进制的形式表示分类变量的每个类别,每个类别对应一个单独的特征列,只有该类别出现时对应的列值为1,其他列值为0,这种表示方式非常直观,但是维度较高,尤其是当类别数量较多时。
2、分布式编码
- 以向量的形式表示数据,向量中的每个元素反映了数据在某个维度上的分布情况,例如在词向量的分布式编码中,向量的元素可能表示单词在不同语义空间中的权重,这种表示方式相对紧凑,并且能够捕捉数据之间的语义关系。
(二)编码维度
1、独热编码
图片来源于网络,如有侵权联系删除
- 编码后的维度等于分类变量的类别数量,一个有100个类别的分类变量经过独热编码后会产生100个新的特征列,这种高维度会带来一些问题,如计算成本增加、数据稀疏等。
2、分布式编码
- 其编码维度可以根据具体的模型和需求进行调整,在Word2Vec中,可以设置词向量的维度(如100维、300维等),分布式编码的维度相对独热编码要低很多,能够有效地减少数据的存储空间和计算量。
(三)对数据关系的捕捉
1、独热编码
- 不考虑类别之间的关系,将每个类别视为独立的个体,对于表示星期的分类变量(星期一、星期二等),独热编码不会体现出星期一和星期二在时间顺序上的相邻关系。
2、分布式编码
- 重点在于捕捉数据之间的关系,在自然语言处理中,分布式编码可以通过词向量表示单词之间的语义相似性、语法关系等。“国王”和“王后”在语义上是相关的,在分布式编码中它们的词向量在向量空间中的距离会比较近。
(四)计算复杂度
1、独热编码
- 计算相对简单,主要是根据分类变量的类别创建新的特征列,并根据数据中的类别值填充0或1,无论是手动计算还是使用现成的库函数,都可以快速完成。
2、分布式编码
- 计算复杂度较高,以Word2Vec为例,它需要构建神经网络模型,进行多次迭代训练,在大规模语料库上计算单词的共现概率等,这个过程需要大量的计算资源和时间,尤其是当语料库规模非常大时。
(五)适用场景
1、独热编码
- 适用于简单的分类变量处理,尤其是当分类变量的类别数量较少,并且不需要考虑类别之间的关系时,将性别(男、女)这样的分类变量进行编码,独热编码就可以很好地满足要求,在一些传统的机器学习算法中,如果对计算资源和数据维度不太敏感,独热编码也是一种方便的选择。
2、分布式编码
- 更适合于需要捕捉数据关系的场景,如自然语言处理中的单词表示、图像识别中的特征表示等,当需要挖掘数据中的语义、语法或者其他潜在关系时,分布式编码能够提供更有效的数据表示方式,在机器翻译任务中,分布式编码的词向量可以帮助模型更好地理解源语言和目标语言中的单词含义,从而提高翻译的准确性。
评论列表