📜  毫升 |一种处理分类数据参数的热编码

📅  最后修改于: 2022-05-13 01:55:10.028000             🧑  作者: Mango

毫升 |一种处理分类数据参数的热编码

有时在数据集中,我们会遇到包含分类特征(字符串值)的列,例如参数Gender将具有分类参数,如MaleFemale 。这些标签没有特定的优先顺序,而且由于数据是字符串标签,机器学习模型不能处理这些数据。

解决这个问题的一种方法是标签编码,我们将为这些标签分配一个数值,例如MaleFemale映射到01 。但这会在我们的模型中增加偏差,因为它将开始对女性参数给予更高的偏好,因为 1>0 并且理想情况下,两个标签在数据集中同样重要。为了解决这个问题,我们将使用 One Hot Encoding 技术。

一种热编码:

在这种技术中,我们对每个分类参数,它将为男性女性标签准备单独的列。所以,只要Gender中有Male ,它就会在Male列中为 1,在Female列中为 0,反之亦然。

让我们通过一个例子来理解:

考虑给出水果及其相应的分类价值和价格的数据。

FruitCategorical value of fruitPrice
apple15
mango210
apple115
orange320


对数据进行一次热编码后的输出如下所示,
applemangoorangeprice
1005
01010
10015
00120


代码: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 个 Remarks2 个 Gender列。但是,如果参数有n 个唯一标签,您可以只使用n-1列来定义参数。例如,如果我们只保留Gender_Female列并删除Gender_Male列,那么我们也可以传达整个信息,当 label 为 1 时表示女性,当 label 为 0 时表示男性。这样我们就可以对分类数据进行编码并减少参数的数量。