如何用Python从100个one-hot标签中选取最常见的单一标签
从100个One-Hot标签中提取出现次数最多的标签
没问题,我来帮你解决这个标签压缩的问题——要把形状为(100,6)的one-hot标签数组压缩成(1,6)的单个标签,核心就是找出出现频次最高的那个one-hot向量,用NumPy就能轻松实现,具体步骤和代码如下:
实现思路
- 转换类别索引:先把每个one-hot向量转换成对应的类别编号(比如
[0,0,0,0,0,1]对应编号5),这样统计频次更方便; - 统计最高频次类别:计算每个类别出现的次数,找出次数最多的那个类别编号;
- 转回One-Hot格式:把最高频次的类别编号重新转换成one-hot编码,调整成(1,6)的形状。
完整代码(基于NumPy)
import numpy as np # 假设你的标签数组是labels,对应你提供的(100,6)数据 labels = np.array([ [0,0,0,0,0,1], [0,0,0,0,0,1], [0,0,1,0,0,0], [0,1,0,0,0,0], # 其他样本省略... ], dtype=int8) # 步骤1:将one-hot标签转换为类别索引(0-5的整数) class_indices = np.argmax(labels, axis=1) # 步骤2:找出出现次数最多的类别编号 most_common_class = np.bincount(class_indices).argmax() # 步骤3:将类别编号转回one-hot编码,并调整为(1,6)形状 compressed_label = np.eye(6)[most_common_class].reshape(1, 6) # 输出结果 print(compressed_label)
代码细节解释
np.argmax(labels, axis=1):沿着每个样本的维度(axis=1)取最大值的索引,把每个6维的one-hot向量简化成一个0到5之间的整数,方便后续统计;np.bincount(class_indices).argmax():bincount会统计每个整数类别出现的次数,返回的数组索引对应类别编号,值对应次数;argmax则直接找出次数最多的类别编号;np.eye(6)[most_common_class]:生成一个6×6的单位矩阵,取对应类别的行就是该类别的one-hot编码,最后用reshape(1,6)把它转换成你需要的(1,6)形状。
针对你的示例数据验证
你提供的标签数组里,[0,0,0,0,0,1](对应类别5)出现的次数最多,所以运行代码后得到的compressed_label会是[[0 0 0 0 0 1]],完全符合需求。
内容的提问来源于stack exchange,提问作者Salman Shaukat
相关产品推荐
相关产品推荐

