Python表格数据结构修改:多标签分组展开建模及结果回聚方法
多标签多项式分类数据格式转换实现方案
以下基于Python pandas库实现全流程转换,适配你提到的三个阶段需求:
阶段1:原始多标签字段解析
首先将Groups字段的字符串格式标签转换为列表格式,方便后续拆分:
import pandas as pd # 示例原始数据,可替换为你读取的实际表格数据 df_raw = pd.DataFrame({ "id": [1, 2], "feature_1": [0.3, 0.9], "feature_2": [15, 27], "Groups": ['"A","C","D"', '"B","C"'] }) # 去除引号后按逗号拆分,得到标签列表 df_raw["group_list"] = df_raw["Groups"].str.replace('"', "").str.split(",")
阶段2:拆分标签得到训练用长表
将每个标签拆分为单独行,其余字段保持原值,直接可用于模型训练:
df_train = df_raw.explode("group_list", ignore_index=True) # 重命名为模型训练用的标签列 df_train = df_train.rename(columns={"group_list": "label"})
输出的df_train每行对应一个ID+单个标签,特征、ID字段和原始行完全一致。
阶段3:预测结果聚合回ID粒度
模型输出每个标签的预测概率后,按原始Groups的标签顺序拼接为字符串,回到一行对应一个ID的格式:
# 示例预测结果,替换为你的模型实际输出 df_pred = pd.DataFrame({ "id": [1,1,1,2,2], "label": ["A","C","D","B","C"], "pred_prob": [0.94, 0.77, 0.62, 0.89, 0.83] }) # 先标记原始标签的顺序,避免聚合后顺序错乱 df_order = df_raw[["id", "group_list"]].explode("group_list").rename(columns={"group_list": "label"}) df_order["rank"] = df_order.groupby("id").cumcount() # 关联预测结果并按原始顺序排序 df_pred_ordered = df_pred.merge(df_order, on=["id", "label"]).sort_values(["id", "rank"]) # 按ID聚合拼接概率字符串 df_result = df_pred_ordered.groupby("id", as_index=False)["pred_prob"].agg( pred_prob_str=lambda x: ",".join(x.round(2).astype(str)) ) # 关联回原始字段得到最终结果 df_final = df_result.merge(df_raw.drop(columns=["group_list"]), on="id", how="left")
如果你的模型直接输出全类别概率矩阵,可以在预测阶段直接按原始
group_list的顺序提取对应概率后拼接,省略上述关联排序步骤,性能更高。
内容的提问来源于stack exchange,提问作者totalsurfer_v1
相关产品推荐
相关产品推荐

