【机器学习300问】49、数据预处理时如何处理类别型特征?

发布于:2024-03-28 ⋅ 阅读:(28) ⋅ 点赞:(0)

        关于特征是什么?以及特征工程是什么意思?在先前我写的文章中已经为大家详细的介绍过了。本文想继续深入特征中的其中一种——类别型特征,来解答一个我自己遇到的困惑,同时记录成文章供大家一起学习。

【机器学习300问】14、什么是特征工程?icon-default.png?t=N7T8http://t.csdnimg.cn/q7lng

一、什么是类别型特征?

        特征是用于描述或刻画数据实例的属性、变量或指标。每一个特征代表了原始数据的一个特定维度上的信息,它们是模型进行学习和预测的基础。知道了特征的概念后,再来理解类别型特征就很轻松了。

(1)举个例子吧

        现在有一件衣服,我想让你描述一下具体这件衣服。你的衣服可能按颜色分为“红色”、“蓝色”、“绿色”,按款式分为“T恤”、“衬衫”、“毛衣”。在这里一件具体的衣服=数据实例;衣服的颜色=第一个特征;衣服的款式=第二个特征。

(2)类别型特征的定义

        类别型特征是指哪些在有限可能选项中取值的特征。这些有限可能选项通常是离散的,而且大多数情况下是字符串形式的,除了少数模型能够直接处理类别型特征,对于大多数模型来说都需要对类别型特征进行必要的处理,转换成数值型特征才能正常工作。

        但有些模型是可以直接处理类别型特征的,比如决策树、随机森林。

二、有哪些处理类别型特征的方式?

        在上面的类别特征定义的末尾谈到了类别特征的特点,它一般是非数字的,所以有必要对其进行转换,那么常见的处理类别型特征的方式有哪些呢:

(1)序号编码(Ordinal Encoding)

        序号编码通常处理类别特征之间存在明确的顺序关系(即等级或次序意义)时。比如学习成绩可以分为高中低三个档次,序号编码会按照大小关系对类别型特征赋予一个数值ID,在学习成绩这个特征中就可以按照高=3,中=2,低=1的规则来转换,转换后的编码保留了原有的大小关系。

教育程度 序号编码
小学 0
中学 1
高中 2
专科 3
本科 4
硕士 5
博士 6

 

(2)标签编码(Label Encoding)

        标签编码方式是说将每一个类别赋予一个唯一的整数标签,但并不表达类别之间的顺序关系。有点想强行硬对应起来,如果模型不关心类别之间的顺序,就可以使用这种方法。

车辆类型 标签编码
轿车 0
卡车 1
巴士 2
摩托车 3
自行车 4

(3)独热编码(One-hot Encoding)

        对于类别间不存在大小关系或顺序意义的特征,最常用的是独热编码。这种方法将每一个类别转化为一个二进制向量,向量中只有一个位置为1(类别存在时为1),其余均为0。独热中的“独”就是指只有一个,“热”就是指1。

        例如,性别(男、女)会被编码为二维向量特征:[1, 0] 表示男性,[0, 1] 表示女性。 

        例如,血型(A型、B型、AB型、O型)会被编码为四维向量特征:[1,0,0,0]表示A型,[0,1,0,0]表示B型,[0,0,1,0]表示AB型,[0,0,0,1]表示O型。

血型 A型 B型 AB型 O型
A型 1 0 0 0
B型 0 1 0 0
AB型 0 0 1 0
O型 0 0 0 1

        独热编码是一种有效的离散特征编码手段,但在实际应用中,使用独热编码时需要注意几个问题:

① 使用稀疏向量节省空间

        当类别很多时,独热编码会导致特征空间的维度急剧增加,尤其是对于那些低频的类别,可能会产生大量的零值。这时,可以利用稀疏矩阵存储这些特征向量,以节省存储空间和计算资源。

② 配合特征选择降低维度

        在高维数据环境下,由于维度灾难等问题,所有独热编码生成的特征不一定都对模型性能有帮助,反而可能导致过拟合。因此,需要结合特征选择的方法来剔除冗余或不相关的特征,减少维度,提高模型效率和泛化能力。

(4)二进制编码(Binary Encoding)

        二进制编码是介于独热编码和标签编码之间的方法,它将类别转换为二进制代码,从而减少新的变量维度。它主要分为两步:

  1. 用序号编码给每个类别赋予一个数值型类别ID
  2. 将类别ID对应的二进制编码作为编码结果
血型 序号编码 二进制编码
A型 1 001
B型 2 010
AB型 3 011
O型 4 100
本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到