Python 处理分类数据

Python 处理分类数据

只包含少量取值的数据被称为分类数据,通常被称为类别或级别,并以两种方式进行描述 – 名义或有序。没有任何内在顺序的数据,比如颜色、性别或动物种类,被表示为名义分类数据,而有序分类数据指的是自然排列或排序的信息,如客户满意度水平或教育程度。本教程将介绍如何处理Python中的分类数据。

设置

pip install pandas
pip install scikit-learn
pip install category_encoders

分类数据通常以文本标签表示,许多机器学习算法需要数值输入数据。客户人口统计数据,产品分类和地理区域仅是一些包含分类数据的真实数据集的示例,这些数据在使用机器学习算法之前必须转换为数值表示。因此,在将分类数据提供给机器学习算法之前,将其转换为数值格式是很重要的。这个过程被称为编码。有各种技术可以对分类数据进行编码,包括独热编码,有序编码和目标编码。

处理分类数据的方法

示例1 – 独热编码

独热编码是一种将分类数据转换为数值格式的技术。它为数据集中的每个类别创建一个二进制向量。向量对应于它所代表的类别,其中包含1,并且对于所有其他类别都是0。

pandas和scikit-learn库提供了执行独热编码的函数。以下代码片段显示了如何使用pandas和scikit-learn执行独热编码。

import pandas as pd
from sklearn.preprocessing import OneHotEncoder
from category_encoders import OrdinalEncoder, TargetEncoder

# Create a pandas DataFrame with categorical data
df = pd.DataFrame({'color': ['red', 'blue', 'green', 'green', 'red']})

# Create an instance of OneHotEncoder
encoder = OneHotEncoder()

# Fit and transform the DataFrame using the encoder
encoded_data = encoder.fit_transform(df)

# Convert the encoded data into a pandas DataFrame
encoded_df = pd.DataFrame(encoded_data.toarray(), columns=encoder.get_feature_names())
print(encoded_df)

输出

x0_blue x0_green x0_red
0   0.0   0.0     1.0
1   1.0   0.0     0.0
2   0.0   1.0     0.0
3   0.0   1.0     0.0
4   0.0   0.0     1.0

示例2 – 序数编码

序数编码是一种流行的编码分类数据的技术,其中每个类别根据其排名或顺序分配不同的数值。具有最低值的类别接收最小的整数,而具有最高值的类别接收最大的整数。当类别被有机地分组时,例如评级(差,一般,好,优秀),或教育成就(高中,大学,研究生院),这种策略非常有用。让我们使用Pandas和category encoders包进行序数编码 –

import pandas as pd
import category_encoders as ce

# create a sample dataset
data = {'category': ['red', 'green', 'blue', 'red', 'green']}
df = pd.DataFrame(data)

# initialize the encoder
encoder = ce.OrdinalEncoder()

# encode the categorical feature
df['category_encoded'] = encoder.fit_transform(df['category'])

# print the encoded dataframe
print(df)

输出

category category_encoded
0         red      1
1         green    2
2         blue     3
3         red      1
4         green    2

如您所见,红色分类被赋予值1,绿色被赋予值2,蓝色被赋予值3。原始数据集中分类出现的顺序是进行此编码的基础。

示例3:使用Category Encoders 进行目标编码

目标编码是另一种用于编码分类数据的技术,特别是在处理高基数特征时。它将每个分类替换为该分类的平均目标值。当分类特征与目标变量之间存在强关系时,目标编码很有用。

import pandas as pd
import category_encoders as ce

# create a sample dataset
data = {'category': ['red', 'green', 'blue', 'red', 'green'], 'target': [1, 0, 1, 0, 1]}
df = pd.DataFrame(data)

# initialize the encoder
encoder = ce.TargetEncoder()

# encode the categorical feature
df['category_encoded'] = encoder.fit_transform(df['category'], df['target'])

# print the encoded dataframe
print(df)

在这个例子中,我们创建了一个带有一个名为”category”的单一分类特征和一个对应的目标变量”target”的样本数据集。我们导入了category_encoders库并初始化了一个TargetEncoder对象。我们使用fit_transform()方法根据目标变量对分类特征进行编码,并将编码后的特征添加到原始数据集中。

输出

category target category_encoded
0   red      1      0.585815
1   green    0      0.585815
2   blue     1      0.652043
3   red      0      0.585815
4   green    1      0.585815

颜色列成功使用目标编码进行编码,如输出中所示,通过类别编码器完成。使用cols选项指定要编码的列,并使用TargetEncoder进行编码。目标变量和编码目标列是fit_transform函数所需的两个参数。

结论

本文介绍了在机器学习应用中正确处理分类数据的重要性。它探讨了一热编码、有序编码和目标编码作为三种在Python中对分类数据进行编码的不同方法。一热编码是一种快速高效的方法,但可能导致更多的特征。当了解类别的顺序时,有序编码是一个合理的选择,但它忽略了类别与目标变量之间的关系。

因此,正确处理分类数据是机器学习系统的关键组成部分,选择适当的编码方法对于产生准确可信的结果至关重要。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程