欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用sklearn进行数据预处理之Binarizer,LabelEncoder,LabelBinarizer,OneHotEncoder

程序员文章站 2022-07-13 08:07:22
...

前言

数据预处理的过程中经常需要对数据进行数值化等处理,比如将性别男女转换为计算机可以理解的1和0,还有将数值化的1,2,3,4,5按照阈值3转换为0,0,0,1,1等,下面介绍一下sklearn提供的类。


Binarizer

这个就是根据阈值将数值型转变为二进制型,阈值可以进行设定,另外只能对数值型数据进行处理,且传入的参数必须为2D数组,也就是不能是Series这种类型,shape为(m,n)而不是(n,)类型的数组,下面看下例子

df = DataFrame(np.arange(12).reshape(4,3),columns=['A','B','C'])
df
第一列为索引值
A   B   C
0   0   1   2
1   3   4   5
2   6   7   8
3   9   10  11
将小于等于5的数值转为0,大于5的转为1

binarize = Binarizer(threshold=5)
binarize.fit_transform(df)
array([[0, 0, 0],
       [0, 0, 0],
       [1, 1, 1],
       [1, 1, 1]])
也可以传入df[['A','B']]来对两列进行转换,注意,不可以是df['A']或者df.A,因为df.A是Series不是二维的

LabelEncoder

可以将数据(类别型或者数值型都可以)转换为一个整数值,比如讲高中低转换为0,1,2,假设特征的取值类别有n种,那么转换到的范围就是[0:n],LabelEncoder的输入必须是个一维的数组,如Series这种格式,如果是DataFrame则会报错,看个例子

df['B'] = ['a','b','c','d']
df
    A   B   C
0   0   a   2
1   3   b   5
2   6   c   8
3   9   d   11

le = LabelEncoder()
le.fit_transform(df.A)
输出:array([0, 1, 2, 3])

le = LabelEncoder()
le.fit_transform(df.B)
输出:array([0, 1, 2, 3])

从例子中可以看出,LabelEncoder可以处理数值型和类别型数据


LabelBinarizer

将对应的数据转换为二进制型,有点类似于onehot编码,这里有几点不同,LabelBinarizer可以处理数值型和类别型数据,输入必须为1D数组,可以自己设置正类和父类的表示方式,下面看例子,还是用之前的数据

df
    A   B   C
0   0   a   2
1   3   b   5
2   6   c   8
3   9   d   11

lb = LabelBinarizer()
lb.fit_transform(df.B)
输出
array([[1, 0, 0, 0],
       [0, 1, 0, 0],
       [0, 0, 1, 0],
       [0, 0, 0, 1]])

也可以对数值型进行转换
lb.fit_transform(df.A)

array([[1, 0, 0, 0],
       [0, 1, 0, 0],
       [0, 0, 1, 0],
       [0, 0, 0, 1]])

OneHotEncoder

来到注明的OneHot编码,注意,OneHotEncoder只能对数值型数据进行处理,还是上面的数据,只接受2D数组

df
    A   B   C
0   0   a   2
1   3   b   5
2   6   c   8
3   9   d   11

onehot = OneHotEncoder(sparse=False)//不产生稀疏矩阵
onehot.fit_transform(df[['A']]) //传入B则会出错

array([[ 1.,  0.,  0.,  0.],
       [ 0.,  1.,  0.,  0.],
       [ 0.,  0.,  1.,  0.],
       [ 0.,  0.,  0.,  1.]])