文章目录
一、 Index编码
用来对离散的类型特征进行编码,如,不连续的数值、文本,将离散的特征转换成连续的数值型变量。基于索引的编码可以起到数据归一化的作用,如,id为1和10000,当id作为LR的特征时,id为1的用户和id为10000的用户基本属性一样,但LR算法中10000权重过大,会导致id=1的特征基本不起作用,必须进行归一化,类似特征都应单独进行归一化。
如特征A取值共有9种情况,如,[1, 200, 10000, 30000, 100000],则索引编码后为[0, 1, 2, 3, 4]。
代码示例:
from sklearn.preprocessing import LabelEncoder
a = [1, 200, 10000, 30000, 100000]
label_coder = LabelEncoder()
label_coder.fit(a)
b = label_coder.transform(a)
print(b)
二、 OneHot编码
OneHot编码也叫独热编码或哑编码,可以解决某些分类器不好处理离散属性数据的问题,在一定长度上也起到了对特征进行扩充的作用。
大部分算法是基于向量空间中的距离度量来进行计算的,为了使非偏序关系的变量取值不具有偏序性,并且到圆点是等距的。使用one-hot编码,将离散特征的取值扩展到了欧式空间,离散特征的某个取值就对应欧式空间的某个点。将离散型特征使用one-hot编码,会让特征之间的距离计算更加合理。离散特征进行one-hot编码后,编码后的特征,其实每一维度的特征都可以看做是连续的特征。跟对连续型特征的归一化方法一样,对每一维特征进行归一化。比如归一化到[-1,1]或归一化到均值为0,方差为1。
为什么特征向量要映射到欧式空间?
在回归,分类,聚类等机器学习算法中,特征之间距离的计算或相似度的计算是非常重要的,而我们常用的距离或相似度的计算都是在欧式空间的相似度计算,如,计算余弦相似性,就是基于欧式空间。
代码示例:
from sklearn.preprocessing import OneHotEncoder
onehot_coder = OneHotEncode