【机器学习】特征编码OneHot与Dummy的区别与联系

文章介绍了在模型训练中对离散特征进行OneHot编码和Dummy编码的方法。OneHot编码将每个特征的每个取值转化为独立的二进制列,而Dummy编码通过去除一个状态来表示所有类别。Python中使用sklearn库的OneHotEncoder进行OneHot编码,使用pandas的get_dummies进行Dummy编码。
摘要由CSDN通过智能技术生成

一、前言

在模型的训练过程中,我们会对数据集的连续特征进行离散化操作,如使用简单的线性模型,然后对离散化后的特征进行OneHot编码或哑变量编码。这样通常会使得我们模型具有较强的非线性能力。

二、OneHot编码

思想:

将离散化特征的每一种取值都成是一种状态,若你的这一特征中有N个不同的取值,那么我们就可以将这些特征抽象成N种不同的状态,OneHot编码保证了每一个取值只有一种状态处于“激活态”,也就是说N种状态中只有一个状态值为1,其他状态为0。

假设我们以学历为例,现有小学、中学、大学、硕士、博士五种类别,使用OneHot编码就会得到:

小学 -> [1,0,0,0,0]
中学 -> [0,1,0,0,0]
大学 -> [0,0,1,0,0]
硕士 -> [0,0,0,1,0]
博士 -> [0,0,0,0,1]

Python中的OneHot用法:

from sklearn import preprocessing
array = np.array([[0,0,3],[1,1,0],[0,2,1],[1,0,2]])
print(array)
enc = preprocessing.OneHotEncoder()
enc.fit(array)
print(enc.n_values_) #每个特征对应的最大位数
print(enc.transform([[0,1,3]]).toarray())
 
array([[0, 0, 3],
       [1, 1, 0],
       [0, 2, 1],
       [1, 0, 2]])
array是一个43列的矩阵,每一列对应于一个样本的特征序列,即一个样本有三个特征,4行表示传入了4个样本
[2 3 4]
每个特征对应的位数:观察第一列可知,第一个特征有两个取值0,1;第二个特征有三个取值0,1,2;第三个特征有四个取值0,1,2,3
[[1. 0. 0. 1. 0. 0. 0. 0. 1.]]
故第一个特征的onehot编码是一个两位的01串,第二个特征是一个三位01串,第三个特征是一个四位的0,1

在对非数值型特征进行onehot编码时需要先通过LabelEncoder()将分类变量转换成整数形式,然后通过OneHotEncoder()进行编码,否则会报错误如下:

ValueError: could not convert string to float: '小学'。另外再用OneHotEncoder()进行编码时需为2D array,否则会有如下错误:ValueError: Expected 2D array, got 1D array instead:
array=[3. 0. 2. 4. 1.].
Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample. 

三、Dummy编码

哑变量编码直观的解释就是任意的将一个状态去除,如学位信息,使用哑变量可以用4个状态就足以反映上述5个类别的信息,也就是我们仅使用前四个状态位就可以表示博士了。因为对于我们的一个研究样本,他如果不是小学生,也不是中学生,大学生、研究生,那他便默认为博士了。所以,用哑变量可以将上述5类表示成:

小学 -> [1,0,0,0]
中学 -> [0,1,0,0]
大学 -> [0,0,1,0]
硕士 -> [0,0,0,1]
博士 -> [0,0,0,0]

Python中的实现如下:

data = ["小学","初中","大学","硕士","博士"]
pd.get_dummies(data,prefix="data")
 
   data_初中  data_博士  data_大学  data_小学  data_硕士
0        0        0        0        1        0
1        1        0        0        0        0
2        0        0        1        0        0
3        0        0        0        0        1
4        0        1        0        0        0
Dummy metal是为了解决芯片制造过程中的一些问题而添加的虚拟金属层。根据引用\[1\],dummy metal可以用于增加金属密度,以防止金属密度不足的情况。此外,dummy metal还可以用于考虑光的反射和衍射,确保关键图形的尺寸不受曝光的影响。 根据引用\[2\],在使用PVS生成dummy metal时,可以直接考虑dummy对时序的影响,并在innovus中修剪dummy以减少不必要的时序调整。生成的GDS文件也包含dummy metal,可以直接用于后续的StarRC使用。 引用\[3\]提到了MOS dummy的应用。在MOS两侧增加dummy poly可以避免长度受到影响。对于NMOS,先加P型guard ring连接VSS,然后加N型guard ring连接VDD。对于PMOS,先加N型连接VDD,然后加P型连接VSS。拆分MOS时,应为偶数根,并将Source端与周围的guard ring就近连接。 综上所述,dummy metal是为了解决芯片制造过程中的问题而添加的虚拟金属层,可以用于增加金属密度、考虑光的反射和衍射,并对时序结果产生影响时进行修剪。在MOS中,dummy metal的应用可以避免长度受到影响。 #### 引用[.reference_title] - *1* *3* [CMOS 器件版图 DUMMY 图形](https://blog.csdn.net/weixin_45881793/article/details/127023332)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [使用PVS生成MetalDummy的实现方法](https://blog.csdn.net/kobayashiyou/article/details/119928600)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旅途中的宽~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值