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

如何将genre列转换为数值以输入神经网络模型?

多值genre列编码实现方案

你遇到的是典型的多标签类别特征编码问题,普通单值类别编码方法(普通独热编码、序数编码)无法适配一条样本对应多个类别的场景,根据你的神经网络结构选择以下两种常用方案即可:

方案1:多标签二值化(适配genre总数较少的场景)

这种方案输出0/1矩阵,每一列对应一个唯一的genre类型,值为1代表当前样本包含该类genre,格式可以直接对接多标签分类任务的神经网络输出层(搭配sigmoid激活使用)。
实现代码如下:

import pandas as pd
from sklearn.preprocessing import MultiLabelBinarizer

# 1. 先把genre列的字符串拆分为标签列表,分隔符按你数据集实际情况修改(常见为逗号、|、/)
# 加strip()是为了去除标签前后多余空格,避免同标签因为空格被识别为不同类
df['genre_list'] = df['genre'].apply(lambda x: [g.strip() for g in x.split(',')])

# 2. 初始化多标签二值化器完成编码
mlb = MultiLabelBinarizer()
encoded_genre = mlb.fit_transform(df['genre_list'])

# 如需把编码结果拼回原数据表,可执行以下代码
encoded_genre_df = pd.DataFrame(encoded_genre, columns=mlb.classes_)

方案2:ID序列编码(适配genre总数大、需要控制维度的场景)

如果genre总类数太多,二值化会导致特征维度过高、内存占用过大,可以给每个genre分配唯一整数ID,将每条样本的多标签转换为ID序列,后续在神经网络中加入Embedding层做嵌入降维即可。
实现代码如下:

# 1. 复用方案1中拆分好的genre_list列
# 2. 构建genre到ID的映射表,ID从1开始计数,预留0作为序列填充位
all_genres = set()
for genre_list in df['genre_list']:
    all_genres.update(genre_list)
genre2id = {genre: idx+1 for idx, genre in enumerate(all_genres)}

# 3. 将标签列表转换为ID序列
df['genre_id_seq'] = df['genre_list'].apply(lambda x: [genre2id[g] for g in x])

# 4. 对ID序列做定长补全/截断,适配神经网络固定输入长度要求,maxlen按你的数据分布设置
from tensorflow.keras.preprocessing.sequence import pad_sequences
padded_genre_seq = pad_sequences(
    df['genre_id_seq'], 
    maxlen=5, 
    padding='post', 
    truncating='post'
)

注意事项

  • 禁止直接对原始genre列使用普通LabelEncoder、OrdinalEncoder,这类工具仅支持单值类别输入,不仅无法处理多值条目,还会给不同类别强加无意义的数值大小关系,干扰模型训练
  • 拆分标签前建议先过滤genre列的空值、异常值,避免编码阶段报错
  • 如果是做回归类任务而非多标签分类任务,二值化输出也可以直接作为特征输入全连接层

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.18 16:15:43