快速将非数值型目标变量转化为数值型变量

快速将非数值型目标变量转化为数值型变量,比如把[‘L’,’M’,’N’]转化为[1,2,3]或多维向量类型

转化前:

1
df_train.y.value_counts()

1
2
3
4
5
6
7
8
C    620
R 477
G 361
M 353
L 267
T 216
E 87
Name: y, dtype: int64

法1:转化为一维型

1
2
3
4
5
6
7
8
9
10
11
12
from sklearn import preprocessing
# 获取目标变量列
data_y=df_train['y']
# 获取目标变量值
y_labels=list(data_y.value_counts().index)
# 创建标签预处理器
le=preprocessing.LabelEncoder()
le.fit(y_labels)

# 对每一个标签值进行映射
y=data_y.map(lambda x :le.transform([x])[0])
y.value_counts()

转化后:

1
2
3
4
5
6
7
8
0    620
5 477
2 361
4 353
3 267
6 216
1 87
Name: y, dtype: int64

法2:转化为多维型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from keras.utils.np_utils import to_categorical
from sklearn import preprocessing
# 获取目标变量列
data_y=df_train['y']
# 获取目标变量值
y_labels=list(data_y.value_counts().index)
# 创建标签预处理器
le=preprocessing.LabelEncoder()
le.fit(y_labels)
# 获取标签的类别数
num_labels=len(y_labels)

# 对每一个标签值进行映射
y=to_categorical(data_y.map(lambda x :le.transform([x])[0]),num_labels)
print(y[:5])

转化后:

1
2
3
4
5
array([[0., 0., 0., 0., 0., 0., 1.],
[0., 0., 0., 0., 0., 0., 1.],
[0., 0., 1., 0., 0., 0., 0.],
[0., 0., 1., 0., 0., 0., 0.],
[0., 0., 1., 0., 0., 0., 0.]])