You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对含多属性重复值的求职候选人数据进行One-hot编码?

解决方案:合并多字段后的统一独热编码

看起来你是把每个Knowledge*和Tag*字段单独做了独热编码,才会出现Jscript_Knowledge1、Jscript_Knowledge2这种冗余列——这确实会导致特征爆炸,直接拉低模型性能。你的核心需求其实是:把所有分散在这些字段里的技能/标签唯一值,统一映射成全局的特征列,不管这个值出现在哪个原始字段,只要候选人拥有就标记为1,没有则为0。

下面用Python pandas给出具体实现步骤,完全匹配你想要的输出格式:

步骤1:提取所有技能/标签的全局唯一值

先把目标字段合并成一个长序列,过滤空值后提取唯一值集合:

import pandas as pd

# 假设你的候选人数据存储在DataFrame df中
target_columns = ['Knowledge1', 'Knowledge2', 'Knowledge3', 'Knowledge4', 'Tag1', 'Tag2']

# 合并所有技能/标签列,提取去重后的唯一值
all_unique_skills = df[target_columns].stack().dropna().unique()

步骤2:为每个唯一技能生成特征列

遍历每个唯一值,检查候选人的任意目标字段是否包含该值,生成0/1标记:

for skill in all_unique_skills:
    # 逐行检查:只要当前行的任意目标字段等于该技能,就标记为1
    df[skill] = df[target_columns].apply(
        lambda row: 1 if skill in row.values else 0,
        axis=1
    )

步骤3:(可选)清理原始字段

如果不需要保留原来的Knowledge*和Tag*字段,可以直接删除:

df = df.drop(target_columns, axis=1)

为什么这个方法能解决问题?

这个思路跳过了“按单个字段做独热编码”的误区,转而从全局视角处理所有技能/标签:

  • 不管Jscript出现在Knowledge1还是Tag2,都会映射到同一列Jscript
  • 特征数量严格等于所有技能/标签的唯一值总数,不会产生冗余后缀
  • 完美匹配你想要的“一个技能对应一列”的输出格式

额外提示:处理空值

如果原始字段存在缺失值(比如某个候选人没有填写Knowledge4),dropna()已经在提取唯一值时排除了空值,apply逻辑也会自动忽略空值(因为空值不会匹配任何技能),无需额外处理。

内容的提问来源于stack exchange,提问作者nedzad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:20:51