毫升 |一种处理分类数据参数的热编码
有时在数据集中,我们会遇到包含分类特征(字符串值)的列,例如参数Gender将具有分类参数,如Male 、 Female 。这些标签没有特定的优先顺序,而且由于数据是字符串标签,机器学习模型不能处理这些数据。
解决这个问题的一种方法是标签编码,我们将为这些标签分配一个数值,例如Male和Female映射到0和1 。但这会在我们的模型中增加偏差,因为它将开始对女性参数给予更高的偏好,因为 1>0 并且理想情况下,两个标签在数据集中同样重要。为了解决这个问题,我们将使用 One Hot Encoding 技术。
一种热编码:
在这种技术中,我们对每个分类参数,它将为男性和女性标签准备单独的列。所以,只要Gender中有Male ,它就会在Male列中为 1,在Female列中为 0,反之亦然。
让我们通过一个例子来理解:
考虑给出水果及其相应的分类价值和价格的数据。
Fruit | Categorical value of fruit | Price |
---|---|---|
apple | 1 | 5 |
mango | 2 | 10 |
apple | 1 | 15 |
orange | 3 | 20 |
对数据进行一次热编码后的输出如下所示,
apple | mango | orange | price |
---|---|---|---|
1 | 0 | 0 | 5 |
0 | 1 | 0 | 10 |
1 | 0 | 0 | 15 |
0 | 0 | 1 | 20 |
代码:One-Hot编码技术的Python代码实现
加载数据
# Program for demonstration of one hot encoding
# import libraries
import numpy as np
import pandas as pd
# import the data required
data = pd.read_csv("employee_data.csv")
print(data.head())
输出:
检查分类参数中的标签
print(data['Gender'].unique())
print(data['Remarks'].unique())
输出:
array(['Male', 'Female'], dtype=object)
array(['Nice', 'Good', 'Great'], dtype=object)
检查分类参数中的标签计数
data['Gender'].value_counts()
data['Remarks'].value_counts()
输出:
Female 7
Male 5
Name: Gender, dtype: int64
Nice 5
Great 4
Good 3
Name: Remarks, dtype: int64
使用get_dummies()对分类参数进行 One-Hot 编码
one_hot_encoded_data = pd.get_dummies(data, columns = ['Remarks', 'Gender'])
print(one_hot_encoded_data)
输出:
我们可以观察到数据中有3 个 Remarks和2 个 Gender列。但是,如果参数有n 个唯一标签,您可以只使用n-1列来定义参数。例如,如果我们只保留Gender_Female列并删除Gender_Male列,那么我们也可以传达整个信息,当 label 为 1 时表示女性,当 label 为 0 时表示男性。这样我们就可以对分类数据进行编码并减少参数的数量。