特征数据一般分为数值特征和对象特征,对于对象特征我们一般采用数据编码的方式转换为可进行处理的数值
对分类型特征值进行编码,即对不连续的数值或文本进行编码
对于数字映射的编码方式,存在一个编码映射表:比如{‘A’: 1, ‘B’: 2, ‘C’: 3}
那么上述的特征可以通过数字编码映射为[1, 2, 1]
from sklearn.preprocessing import LabelEncoder
label_encode = LabelEncoder()
data_train['grade'] = label_encode.fit_transform(data_train['grade'])#fit_transform(y):相当于先进行fit再进行transform,即把y塞到字典中去以后再进行transform得到索引值。
data_train['grade']
使用map进行直接的数字编码映射
for data in [data_train, data_test_a]:
data['grade'] = data['grade'].map({'A':1,'B':2,'C':3,'D':4,'E':5,'F':6,'G':7})
data_train['grade']
编码后各分量之间距离平衡,编码格式为二进制代码,相互之间的欧式距离相等,有利于消除由于编码带来的性能偏差,设置三个特征:西瓜的敲声=[沉闷,浑浊];西瓜的色泽=[乌黑,青绿,浅白,深绿];西瓜的纹理=[清晰,模糊,稍糊]
则
[沉闷,青绿,模糊]
[浑浊,深绿,清晰]
[浑浊,浅白,稍糊]
[沉闷,乌黑,模糊]可映射为a矩阵
from sklearn.preprocessing import OneHotEncoder
enc = OneHotEncoder()
a= [[0,1,2],
[1,3,0],
[1,2,2],
[0,0,1]]
enc.fit(a)
data = enc.transform([[1,2,1]]).toarray() #a = [浑浊,浅白,模糊]
print(data)
对敲声的两个选项进行编码为 10和01
对色泽的四个选项进行编码为 0001,0010,0100,1000
对纹理的三个选项进行编码为 001,010,100
# 类型数在2之上,又不是高维稀疏的,且纯分类特征
for data in [data_train, data_test_a]:
data = pd.get_dummies(data, columns=['subGrade', 'homeOwnership', 'verificationStatus', 'purpose', 'regionCode'], drop_first=True)#进行独热编码