机器学习基础-监督学习-标签编码之独热编码(One-Hot Encoding)
独热编码(One-Hot Encoding)是一种常用的标签编码方法,通常用于将标签转换为适合机器学习算法使用的格式。独热编码将每个标签都映射为一个由 0 和 1 组成的向量,向量的长度等于标签数量,对于每个标签,只有对应位置的值为 1,其余位置的值为 0。
例如,对于有三个标签 A、B 和 C 的问题,独热编码后的结果如下:
标签 | 独热编码 |
---|---|
A | [1, 0, 0] |
B | [0, 1, 0] |
C | [0, 0, 1] |
独热编码可以解决标签之间距离和相关性不明显的问题,但也可能会增加数据集的维度和复杂度。因此,在选择使用独热编码时需要权衡其优缺点,根据具体问题和数据集选择最适合的编码方法。
下面是一个使用 Python 的 Pandas 库实现独热编码的示例代码:
import pandas as pd
# 创建一个包含标签的数据集
data = pd.DataFrame({'color': ['red', 'green', 'blue', 'blue', 'red']})
# 对 'color' 列进行独热编码
one_hot_encoded = pd.get_dummies(data['color'])
print(one_hot_encoded)
输出结果如下:
blue green red
0 0 0 1
1 0 1 0
2 1 0 0
3 1 0 0
4 0 0 1
在上面的示例代码中,我们首先创建了一个包含标签的数据集,然后使用 Pandas 库中的 get_dummies() 函数对其中的 'color' 列进行独热编码,得到了一个新的数据集 one_hot_encoded,其中每一列对应一个标签,每一行对应一个数据点,值为 1 表示该数据点属于对应的标签,值为 0 表示不属于。
独热编码的公式如下:
假设有 n 个不同的标签,对于第 i 个标签,其独热编码为一个 n 维的向量,其中第 i 个位置的值为 1,其余位置的值为 0。对于一个包含 m 个数据点的数据集,其中第 j 个数据点属于第 i 个标签,则该数据点的独热编码为:
[0, ..., 0, 1, 0, ..., 0]
|__i__|
其中独热编码向量的长度为 n,第 i 个位置的值为 1,其余位置的值为 0。
除了使用 Pandas 库的 get_dummies() 函数进行独热编码外,还可以使用 Python 的 Scikit-Learn 库中的 OneHotEncoder 类进行独热编码。下面是使用 Scikit-Learn 库进行独热编码的示例代码:
from sklearn.preprocessing import OneHotEncoder
import numpy as np
# 创建一个包含标签的数据集
data = np.array(['red', 'green', 'blue', 'blue', 'red']).reshape(-1, 1)
# 创建 OneHotEncoder 对象并进行独热编码
encoder = OneHotEncoder()
one_hot_encoded = encoder.fit_transform(data).toarray()
print(one_hot_encoded)
输出结果如下:
[[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]
[0. 0. 1.]
[1. 0. 0.]]
在上面的示例代码中,我们首先创建了一个包含标签的数据集,然后创建了一个 OneHotEncoder 对象,并使用其 fit_transform() 方法对数据集进行独热编码,得到一个新的数据集 one_hot_encoded,其中每一列对应一个标签,每一行对应一个数据点,值为 1 表示该数据点属于对应的标签,值为 0 表示不属于。
需要注意的是,在使用 OneHotEncoder 进行独热编码时,需要将输入数据的类型转换为整数类型或者字符串类型,否则会报错。另外,如果输入数据集的维度为一维,则需要使用 reshape() 函数将其转换为二维。
除了 Pandas 和 Scikit-Learn 库外,还有许多其他的 Python 库可以用于独热编码,如 TensorFlow 和 PyTorch 等深度学习框架。这些框架中通常会提供专门的函数或者类来实现独热编码,并支持 GPU 加速等优化操作,可以大大提高编码效率和计算速度。
转载自:https://juejin.cn/post/7243725358130446373