Python一键式编码–使用Sklearn实现
一键编码是一种以二进制矢量形式表示分类数据的技术。
在执行分类之前,这是处理顺序数据的常用步骤。
一键编码还提供了一种实现单词嵌入的方法。
单词嵌入是指将单词转换为数字以便机器能够理解的过程。
通常先在语料库中嵌入单词,然后再将其输入LSTM模型。
从语料库中嵌入单词使计算机更容易找到单词之间的关系和模式。
在本教程中,我们将了解什么是一键编码,然后使用Sklearn来实现它。
使用Python进行一键编码的工作
考虑以下单词序列。
['Python', 'Java', 'Python', 'Python', 'C++', 'C++', 'Java', 'Python', 'C++', 'Java' ]
这是具有三个类别的顺序数据。
上面数据中的类别如下:
- Python
- Java
- C++
让我们尝试了解一键编码背后的工作原理。
一站式取心具有两个步骤。
- 将类别转换为整数
- 整数到二进制向量的转换
1.将类别转换为整数
让我们将示例中的三个类别转换为整数。
C++ | 0 |
Java | 1 |
Python | 2 |
现在,我们可以使用这些整数表示原始数据,如下所示:
[2 1 2 2 0 0 1 2 0 1]
您可以使用上面的转换表读取此数据。
现在转到第二步。
2.将整数转换为二进制向量
这不是通常的整数到二进制的转换。
而是在此转换中,我们仅将与整数相对应的值索引设置为1,而在向量中将所有其他条目设置为零。
让我们看看这是什么意思:
C++ | 0 | [1, 0, 0] |
Java | 1 | [0, 1, 0] |
Python | 2 | [0, 0, 1] |
我们可以在示例中将数据表示为:
[[0. 0. 1.] [0. 1. 0.] [0. 0. 1.] [0. 0. 1.] [1. 0. 0.] [1. 0. 0.] [0. 1. 0.] [0. 0. 1.] [1. 0. 0.] [0. 1. 0.]]
现在,我们的原始序列数据为2-D矩阵形式。
这使机器更容易理解它。
使用Sklearn实现一键编码的Python代码
让我们转到"一键编码"的实现部分。
我们将使用Sklearn来实现相同的功能。
在实施的同时,我们将遵循相同的两步方法。
步骤如下:
使用LabelEncoder将类别转换为整数。
使用OneHotEncoder将整数转换为One-Hot向量(二进制向量)。
在继续之前,让我们在示例中编写代码以声明数据数组。
import numpy as np data = ['Python', 'Java', 'Python', 'Python', 'C++', 'C++', 'Java', 'Python', 'C++', 'Java' ] vals = np.array(data)
1.使用LabelEncoder将Categories转换为Integer
我们将首先在数据上使用LabelEncoder。
让我们从Sklearn导入它,然后在数据上使用它。
相同的代码如下:
from sklearn.preprocessing import LabelEncoder label_encoder = LabelEncoder() integer_encoded = label_encoder.fit_transform(vals) print(integer_encoded)
输出:
输出结果为:
[2 1 2 2 0 0 1 2 0 1]
2.使用OneHotEncoder将整数编码转换为一键编码
现在,让我们将整数编码转换为一次性编码。
OneHotEncoder仅适用于列格式的数据。
要使用LabelEncoder中的整数编码,我们必须在将输出提供为OneHotEncoder的输入之前对其进行整形。
可以使用以下代码行完成此操作:
integer_encoded_reshape = integer_encoded.reshape(len(integer_encoded), 1) print(integer_encoded_reshape)
输出:
[[2] [1] [2] [2] [0] [0] [1] [2] [0] [1]]
现在,我们可以使用这些数据来生成"一键通"向量。
from sklearn.preprocessing import OneHotEncoder onehot_encoder = OneHotEncoder(sparse=False) onehot_encoded = onehot_encoder.fit_transform(integer_encoded_reshape) print(onehot_encoded)
输出:
[[0. 0. 1.] [0. 1. 0.] [0. 0. 1.] [0. 0. 1.] [1. 0. 0.] [1. 0. 0.] [0. 1. 0.] [0. 0. 1.] [1. 0. 0.] [0. 1. 0.]]
完整的代码
这是本教程的完整代码:
import numpy as np from sklearn.preprocessing import LabelEncoder from sklearn.preprocessing import OneHotEncoder # data data = ['Python', 'Java', 'Python', 'Python', 'C++', 'C++', 'Java', 'Python', 'C++', 'Java' ] vals = np.array(data) # Integer Encoding label_encoder = LabelEncoder() integer_encoded = label_encoder.fit_transform(vals) print(integer_encoded) #reshaping for OneHotEncoder integer_encoded_reshape = integer_encoded.reshape(len(integer_encoded), 1) # One-Hot Encoding onehot_encoder = OneHotEncoder(sparse=False) onehot_encoded = onehot_encoder.fit_transform(integer_encoded_reshape) print(onehot_encoded)