【机器学习笔记Ⅰ】6 多类特征

发布于:2025-07-07 ⋅ 阅读:(18) ⋅ 点赞:(0)

多类特征(Multi-class Features)详解

多类特征是指一个特征(变量)可以取多个离散的类别值,且这些类别之间没有内在的顺序关系。这类特征是机器学习中常见的数据类型,尤其在分类和回归问题中需要特殊处理。

1. 核心概念

(1) 什么是多类特征?

  • 定义:特征是离散的、有限的类别,且类别之间无大小或顺序关系。
    示例

    • 颜色:红、绿、蓝(无顺序)。
    • 城市:北京、上海、广州(无数学意义的大小关系)。
    • 动物类别:猫、狗、鸟(纯类别标签)。
  • 对比其他类型特征

    特征类型 示例 是否有序 数值意义
    多类特征 颜色、城市、品牌
    有序分类特征 学历(小学<中学<大学) 部分有
    数值特征 年龄、温度、价格

(2) 为什么需要特殊处理?

机器学习模型(如线性回归、神经网络)通常只能处理数值型数据,而多类特征是非数值的,直接输入模型会导致错误。
错误示例

  • 将“颜色”直接赋值为 红=1, 绿=2, 蓝=3,模型会误认为“蓝 > 绿 > 红”(实际上它们无大小关系)。

2. 多类特征的编码方法

(1) 独热编码(One-Hot Encoding)

  • 原理:为每个类别创建一个新的二进制特征(0或1)。
    示例

    原始特征(颜色) 绿
    1 0 0
    绿 0 1 0
    0 0 1
  • 优点

    • 完全消除类别间的虚假顺序关系。
    • 适合类别数量较少(<10)的特征。
  • 缺点

    • 类别过多时会导致特征维度爆炸(“维度灾难”)。
  • 代码实现(Python)

    import pandas as pd
    df = pd.DataFrame({"颜色": ["红", "绿", "蓝", "绿"]})
    df_encoded = pd.get_dummies(df, columns=["颜色"])
    print(df_encoded)
    

    输出

    颜色_红 颜色_绿 颜色_蓝
    1 0 0
    0 1 0
    0 0 1
    0 1 0

(2) 标签编码(Label Encoding)

  • 原理:为每个类别分配一个整数(如红=0, 绿=1, 蓝=2)。
    示例

    颜色(原始) 颜色(编码后)
    0
    绿 1
    2
  • 适用场景

    • 树模型(如决策树、随机森林)可以直接处理整数编码。
    • 不适用于线性模型(因为模型会误认为类别有顺序关系)。
  • 代码实现

    from sklearn.preprocessing import LabelEncoder
    encoder = LabelEncoder()
    df["颜色_编码"] = encoder.fit_transform(df["颜色"])
    print(df)
    

(3) 目标编码(Target Encoding)

  • 原理:用该类别的目标变量均值(如房价均值)代替类别标签。
    示例

    城市 房价(原始) 目标编码(城市平均房价)
    北京 500万 450万
    上海 400万 420万
    北京 400万 450万
  • 优点

    • 保留类别与目标的关系,适合高基数(类别多)特征。
  • 缺点

    • 容易过拟合(需配合交叉验证使用)。

3. 如何选择编码方法?

方法 适用场景 注意事项
独热编码 类别少(<10),线性模型(如逻辑回归) 避免维度爆炸
标签编码 树模型(如随机森林) 不适用于线性模型
目标编码 高基数类别(如城市、用户ID) 需防止数据泄漏(用交叉验证)
嵌入编码 深度学习(如NLP中的词嵌入) 需要大量数据

4. 多类特征的实际应用

示例:预测房屋价格

  • 原始特征
    data = {
        "城市": ["北京", "上海", "广州", "北京"],
        "房屋类型": ["公寓", "别墅", "公寓", "别墅"],
        "价格": [500, 800, 400, 600]
    }
    df = pd.DataFrame(data)
    
  • 编码后(独热编码 + 目标编码):
    城市_北京 城市_上海 城市_广州 房屋类型_公寓 房屋类型_别墅 价格
    1 0 0 1 0 500
    0 1 0 0 1 800
    0 0 1 1 0 400
    1 0 0 0 1 600

5. 总结

  • 多类特征是非数值、无序的离散特征,必须编码后才能输入模型。
  • 独热编码最通用,但需注意维度问题;标签编码适合树模型;目标编码适合高基数特征。
  • 选择编码方法时需考虑模型类型、特征类别数量和数据规模。