📅  最后修改于: 2023-12-03 15:09:38.431000             🧑  作者: Mango
如果您的数据集包含分类(离散)变量,您需要将这些变量转换为数字型,以便于分析和建模。在这篇教程中,我们将介绍几种将熊猫分类数据转换为数字型的方法。
Label Encoding 是将每个类别赋予一个数字的简单方法。熊猫库中有一个 LabelEncoder 类,它很容易使用。
from sklearn.preprocessing import LabelEncoder
import pandas as pd
df = pd.DataFrame({'animal': ['cat', 'dog', 'fish', 'cat', 'dog']})
le = LabelEncoder()
df['animal_encoded'] = le.fit_transform(df['animal'])
print(df)
输出为:
animal animal_encoded
0 cat 0
1 dog 1
2 fish 2
3 cat 0
4 dog 1
在这个例子中,每个动物都分配了一个数字,而 cat 是 0,dog 是 1,fish 是 2。然而,Label Encoding 有一个潜在的问题,即数字之间的顺序可能会被算法误解,因此它只适用于标签之间没有大小关系的情况。
One-Hot Encoding 是将每个类别转换为二元向量的一种方法。例如,如果我们的数据集包含三个类别 cat、dog 和 fish,则将每个值转换为一个三元向量,并将属于该类别的位置设置为 1,其余位置设置为 0,即 cat = [1, 0, 0],dog = [0, 1, 0],fish = [0, 0, 1]。
熊猫库有一个 get_dummies 函数,它帮助我们轻松地实现 One-Hot Encoding。
import pandas as pd
df = pd.DataFrame({'animal': ['cat', 'dog', 'fish', 'cat', 'dog']})
one_hot = pd.get_dummies(df['animal'])
print(one_hot)
输出为:
cat dog fish
0 1 0 0
1 0 1 0
2 0 0 1
3 1 0 0
4 0 1 0
在这个例子中,我们将每个动物转换为二元向量,并分配给新的 DataFrame。
Binary Encoding 是将整数值转换为二进制码向量的一种方法。例如,如果我们有一个包含 5 个类别的数据集,则可以使用二进制编码将其转换为 3 位二进制码:000、001、010、011 和 100。
对于二进制编码的实现,我们需要使用 Python 库 Category Encoders。它可以轻松地将离散变量转换为数字型。
!pip install category_encoders
import pandas as pd
import category_encoders as ce
df = pd.DataFrame({'animal': ['cat', 'dog', 'fish', 'cat', 'dog']})
encoder = ce.BinaryEncoder(cols=['animal'])
df_binary = encoder.fit_transform(df)
print(df_binary)
输出为:
animal_0 animal_1 animal_2
0 0 0 1
1 0 1 0
2 0 1 1
3 0 0 1
4 0 1 0
在这个例子中,我们使用 BinaryEncoder 类将分类变量转换为数字型。结果是一个新的 DataFrame,其中每个变量都表示其对应的包含二进制值的向量。
无论您使用哪种方法,数据预处理对于成功的机器学习模型至关重要。通过将分类变量转换为数字型,您的数据集传递给机器学习算法后会更容易进行分析和建模。