独热编码的定义,应用场景:(来自豆包)

1.定义:独热编码是一种将分类变量转换为机器学习模型可处理的数值向量的技术。其本质是用二进制向量表示每个类别,向量中只有一个位置为 1(表示该类别),其余位置为 0。

2.技术原理:

以简单分类变量为例:
假设变量 “颜色” 包含 3 个类别:红色、绿色、蓝色。

  • 红色 → 独热编码:[1, 0, 0]
  • 绿色 → 独热编码:[0, 1, 0]
  • 蓝色 → 独热编码:[0, 0, 1]

优势

  • 消除类别间的顺序假设(如 “红色” 和 “绿色” 在编码后是独立向量,无大小关系)。
  • 使模型更容易学习类别间的独立特征(如神经网络、支持向量机等)。

3.本文应用场景:

     机器学习与数据预处理,处理非数值型分类特征(如性别、职业、产品类别等)。大多数机器学习算法(如线性回归、逻辑回归)要求输入为数值,且无法直接处理文本或类别信息。

      注:也可用于自然语言处理(NLP),计算机视觉(CV)

举例:电商用户行为分析------分析用户购买行为与支付方式之间的关系

原始数据:                                                 

                 

 独热编码处理后:                      

                                    

模型可通过编码后的二进制特征,分析不同支付方式与购买金额的关联(如支付宝用户是否更倾向高消费)。                                                                                         

4.独热编码的局限性与替代方案:

  • 局限性:
    • 当类别数量过多时(如词汇表包含 10 万单词),编码向量维度极高,导致模型参数增多(维度灾难)。
    • 无法捕捉类别间的潜在关系(如 “汽车” 和 “自行车” 同属 “交通工具”,但独热编码中是独立向量)。
  • 替代方案:
    • 标签编码(Label Encoding):为类别分配连续整数(适用于有顺序的类别,如 “小、中、大”)。
    • 词嵌入(Word Embedding):如 Word2Vec,用低维稠密向量表示类别,保留语义关联(NLP 中常用)。

实践:在python中对数据进行独热编码处理

(以房屋居住数据为例)

现在在py文件中 一次性处理data数据中所有的连续变量和离散变量

1. 读取data数据,找到离散变量

import pandas as pd
data = pd.read_csv('data.csv') 
 
for discrete_features in data.columns:
    if data[discrete_features].dtype == 'object':
# 一般字符串类型可做独热编码处理
        print(discrete_features)
# 打印出离散变量中每个类别的名称以及个数
print(data['Home Ownership'].value_counts())

2. 对离散变量进行one-hot编码

data = pd.get_dummies(data, columns=['Home Ownership'])
print(data.columns)    # 独热编码后的列名会发生变化
# Home Ownership变为 Home Ownership_Rent Home Ownership_Owe Home等等

3. 对独热编码后的变量(bool型)转化为int类型

data['Home Ownership_Rent'] =data ['Home Ownership_Rent'].astype(int)

4.对所有缺失值进行填充

for i in data.columns:
    if data[i].isnull().sum() > 0: # 找到存在缺失值的列
        mean_value = data[i].mean()
        #用均值填充缺失值
        data[i].fillna(mean_value, inplace=True)

扩展:如何一次性对变量进行独热编码处理

discrete_lists = []  # 借助列表
for discrete_features in data.columns:
    if data[discrete_features].dtype == 'object':
        discrete_lists.append(discrete_features)
data = pd.get_dummies(data, columns=discrete_lists, drop_first=True)

@浙大疏锦行

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐