在Python中,序数编码(Ordinal Encoding)是一种将分类特征转换为数值型特征的方法,尤其适用于类别间具有某种排序意义的情况。例如,在一个数据集中,“低”、“中”、“高”三个等级的特征就可以使用序数编码,其中“低”映射为1,“中”映射为2,“高”映射为3,因为这三个等级之间存在明确的顺序关系。
在sklearn
库中,可以使用OrdinalEncoder
类来进行序数编码:
from sklearn.preprocessing import OrdinalEncoder
# 假设我们有一个pandas DataFrame df,并且一列名为'category'的分类数据
df = pd.DataFrame({
'category': ['low', 'medium', 'high', 'low', 'high']
})
# 创建一个OrdinalEncoder实例
oe = OrdinalEncoder()
# 拟定类别到整数的映射
df_encoded = oe.fit_transform(df[['category']])
# fit_transform会根据传入的数据自动分配序号,之后可以用transform方法对新数据进行同样的编码
# 转换后df_encoded是一个二维数组,可以直接用于机器学习模型训练
# 如果需要转换回DataFrame格式以便查看或进一步操作
df_encoded = pd.DataFrame(df_encoded, columns=['category_encoded'])
# 输出结果可能是:
# category_encoded
# 0 0
# 1 1
# 2 2
# 3 0
# 4 2
在上述代码中,OrdinalEncoder
默认情况下会从0开始编号,每个类别都会得到一个唯一的整数编码。注意,在实际应用中,应当确保类别间的顺序是有意义的,否则可能引入虚假的相关性。如果类别间没有自然的排序,应考虑使用独热编码或其他无序类别编码技术。