One-Hot独热编码
Dummy Encoding VS One-Hot Encoding
二者都可以对Categorical Variable做处理,定性特征转换为定量特征,
转换为定量特征其实就是将原来每个特征的类别拿出来作为一个新的特征(Dummy Variable)了,
如性别——男,女,定量特征即将男作为一个特征,女作为一个特征,如果数据中的Categorical Variable很多,且每个Variable种类比较多,那么转换后的数据可能会非常稀疏。
两者本身存在差别:
difference:一个定性特征或者成为Categorical Variable,其有n个值,
Dummy Encoding 会将这个Categorical Variable转换为n-1个特征变量,
而OneHot Encoding会转换为n个特征变量。
其中,这种转换在经济学或者回归模型中会存在一个Dummy Variable Trap的问题,
使用Dummy Encoder可以避免这个问题,
对于Dummy Variable Trap问题下面未做介绍。
由于我这里面对的是分类问题,没有过多的调研。
1 #方法一(使用pandas.get_dummies进行onehot编码) 2 import pandas as pd 3 testdata_01= pd.read_csv('D:/suning/learning/testdata.csv') # 读取数据 4 a=pd.get_dummies(testdata_02,columns=['pet'])#onehot encoding
1 b=pd.get_dummies(testdata_01,columns=['pet'],drop_first=True)#dummy encoding
1 c=pd.get_dummies(testdata_01,columns=['is_has_car'])#onehot encoding
1 d=pd.get_dummies(testdata_01,columns=['is_has_car'],drop_first=True)#onehot encoding
1 e=pd.get_dummies(testdata_01) #onehot encoding
2 f=pd.get_dummies(testdata_01,drop_first=True)
1 #方法二(使用sklearn.preprocessing进行onehotcoder) 2 ##sklearn中的OneHotEncoder提供fit(X),transform(X),fit_transform(X), 3 ##其中X是一个二维数组,且数组类型为int,不能直接处理字符串类型的Categorical Varibale 4 ##先把字符串类型定性特征转变为连续的数值型变量,再用OneHotEncoder二值化。 5 import pandas as pd 6 import numpy as np 7 from sklearn.preprocessing import LabelEncoder,OneHotEncoder 8 a=LabelEncoder().fit_transform(testdata_01['pet'])#把字符串类型定性特征转变为连续的数值型变量 9 aaa=OneHotEncoder(sparse=False).fit_transform(np.array(a).reshape(-1,1))#OneHotEncoder二值化 10 11 #结论:pandas.get_dummies可以很方便的对定性特征定量化,且可以批量处理。第二种方法无法批量的对定性特征进行定量化。 12 #建议使用第一种方法。