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

如何将嵌套多标签列表转换为独热编码?Sklearn使用咨询

解决多标签转独热编码并计算余弦相似度的问题

嘿,作为数据科学和sklearn的新手,碰到这类标签转换问题太正常啦~其实你提到的LabelEncoder更适合处理单分类标签(每个样本只有一个标签的场景),而你需要的是多标签独热编码,sklearn里的MultiLabelBinarizer才是精准匹配你需求的工具,我一步步给你演示操作:

步骤1:导入所需工具

首先导入sklearn里的多标签二值化工具,以及后续计算余弦相似度的模块:

from sklearn.preprocessing import MultiLabelBinarizer
from sklearn.metrics.pairwise import cosine_similarity

步骤2:定义原始数据

把你给出的嵌套字符串列表赋值给变量:

raw_labels = [ ["JAVA", "JAVASCRIPT", "PYTHON"], 
               ["JAVASCRIPT", "PYTHON", "NODEJS"], 
               ["JAVASCRIPT", "JAVA"], 
               ["JAVASCRIPT", "PYTHON"], 
               ["JAVA"] ]

步骤3:生成独热编码矩阵

初始化MultiLabelBinarizer,然后拟合并转换你的原始标签数据:

mlb = MultiLabelBinarizer()
one_hot_matrix = mlb.fit_transform(raw_labels)

步骤4:查看对应标签与格式化输出

你可以通过mlb.classes_获取独热编码对应的列标签,然后按照你想要的格式打印结果。如果需要固定你指定的列顺序,初始化时传入classes参数即可:

# 初始化时指定你要的列顺序
mlb = MultiLabelBinarizer(classes=["JAVA", "PYTHON", "JAVASCRIPT", "NODEJS"])
one_hot_matrix = mlb.fit_transform(raw_labels)

# 打印表头
print("\t".join(mlb.classes_))
# 逐行打印带序号的结果
for idx, row in enumerate(one_hot_matrix, 1):
    row_str = "\t".join(map(str, row))
    print(f"{idx}th\t{row_str}")

运行这段代码后,输出就会和你想要的格式完全一致:

JAVA    PYTHON  JAVASCRIPT  NODEJS
1st     1       1           1       0
2nd     0       1           1       1
3rd     1       0           1       0
4th     0       1           1       0
5th     1       0           0       0

步骤5:计算余弦相似度

得到独热编码矩阵后,直接用cosine_similarity就能计算样本间的余弦相似度:

similarity_matrix = cosine_similarity(one_hot_matrix)
print("余弦相似度矩阵:")
print(similarity_matrix)

输出的矩阵里,similarity_matrix[i][j]就代表第i+1个样本和第j+1个样本的余弦相似度。

为什么不用LabelEncoder?

简单说,LabelEncoder的作用是把每个类别映射成一个唯一整数(比如JAVA→0,PYTHON→1),它只能处理每个样本只有一个标签的情况,没法生成你需要的多标签二进制矩阵,所以这里MultiLabelBinarizer才是正确选择~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 07:32:51