自学内容网 自学内容网

【漫话机器学习系列】021.类别特征(Categorical Feature)

类别特征(Categorical Feature)

类别特征(Categorical Feature)是指取值为有限的、不连续的类别或标签的数据特征。在机器学习和数据分析中,类别特征经常用于描述对象的分类属性,例如颜色、性别、职业等。


1. 类别特征的特点

  • 离散性:类别特征的值是离散的,不具有连续性。
  • 有限性:类别特征的取值范围通常是有限的,例如颜色(红、绿、蓝)。
  • 无序性:某些类别特征没有明确的大小顺序关系,例如职业类型。
  • 可能存在层级关系:某些类别特征可能具有内在顺序关系,例如学历(高中 < 本科 < 硕士)。

2. 类别特征的常见类型

  1. 标称变量(Nominal Variable)

    • 没有顺序关系的类别特征。
    • 例子:颜色(红、绿、蓝)、职业(医生、教师、工程师)。
  2. 有序变量(Ordinal Variable)

    • 存在顺序关系的类别特征,但无法量化差距大小。
    • 例子:评级(差、一般、好)、学历(高中、本科、硕士)。

3. 类别特征的处理方法

(1) 编码

在将数据输入机器学习模型前,类别特征需要转换为数值形式:

  • 标签编码(Label Encoding)
    将类别值映射为整数。
    例子:{红: 0, 绿: 1, 蓝: 2}
    缺点:可能引入错误的顺序关系,适合有序变量。

  • 独热编码(One-Hot Encoding)
    使用二进制向量表示类别值。
    例子:

    • 红:1, 0, 0
    • 绿:0, 1, 0
    • 蓝:0, 0, 1

      常用于标称变量,避免顺序关系问题。
  • 目标编码(Target Encoding)
    将类别映射为目标变量的统计信息(如均值)。
    例子:对于目标值 y,将类别 x 替换为类别内 y 的均值。

  • 频率编码(Frequency Encoding)
    将类别映射为其在数据集中出现的频率。
    例子:颜色红的频率为 0.5,绿为 0.3,蓝为 0.2。

(2) 特征嵌入(Embedding)

将高维类别特征映射到低维稠密向量空间中,适用于深度学习模型。

  • 使用神经网络学习的嵌入层,例如 TensorFlow 或 PyTorch 中的 Embedding 层。
(3) 聚合统计特征

计算类别特征的相关统计特征,常用于增强模型性能:

  • 平均值、方差、中位数等。
  • 例子:计算某职业类型的平均收入。

4. 类别特征在机器学习中的挑战

  1. 类别数目过多

    • 可能导致维度过高(独热编码的高维问题)。
    • 可通过合并类别、降维或频率截断等方法处理。
  2. 类别未见(Unseen Categories)

    • 测试集可能包含训练集中未见过的类别。
    • 可用频率编码或目标编码来减少影响。
  3. 类别不均衡

    • 某些类别的数据过少,可能导致模型偏差。
    • 可通过数据采样、类别合并或数据增强方法处理。

5. 示例代码

以下是对类别特征进行常用处理的代码示例:

import pandas as pd
from sklearn.preprocessing import LabelEncoder, OneHotEncoder

# 示例数据
data = {'Color': ['Red', 'Green', 'Blue', 'Green', 'Red'], 
        'Size': ['S', 'M', 'L', 'M', 'S'], 
        'Target': [1, 0, 1, 0, 1]}
df = pd.DataFrame(data)

# 标签编码
label_encoder = LabelEncoder()
df['Color_LabelEncoded'] = label_encoder.fit_transform(df['Color'])

# 独热编码
onehot_encoder = OneHotEncoder(sparse=False)
color_onehot = onehot_encoder.fit_transform(df[['Color']])
df_onehot = pd.DataFrame(color_onehot, columns=onehot_encoder.get_feature_names_out(['Color']))
df = pd.concat([df, df_onehot], axis=1)

# 目标编码
target_mean = df.groupby('Color')['Target'].mean()
df['Color_TargetEncoded'] = df['Color'].map(target_mean)

print(df)

 输出结果

   Color Size  Target  ...  Color_Green  Color_Red  Color_TargetEncoded
0    Red    S       1  ...          0.0        1.0                  1.0
1  Green    M       0  ...          1.0        0.0                  0.0
2   Blue    L       1  ...          0.0        0.0                  1.0
3  Green    M       0  ...          1.0        0.0                  0.0
4    Red    S       1  ...          0.0        1.0                  1.0


6. 应用场景

  • 电子商务:商品类别、用户类别、支付方式等。
  • 金融:职业类型、婚姻状况、信用评级等。
  • 医学:疾病类别、药品类型、患者类别等。

7. 总结

类别特征在实际问题中非常常见,是数据分析和机器学习建模的重要组成部分。
通过选择合适的处理方法,模型可以更准确地理解类别特征的含义并提高预测性能。


原文地址:https://blog.csdn.net/IT_ORACLE/article/details/144709765

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!