Rachel MuZy 2022-03-08 21:41 采纳率: 0%
浏览 81
已结题

深度学习样本均衡问题

可否请教一下大家这个样本均衡的代码如何理解,谢谢
#进行基本的样本均衡
Label_num = Counter(step_labels)
min_Label_num = min(Label_num.values())#取得各标签中最少出现标签的个数
formal_id = list()
output = np.array(step_labels)
for i in range(class_nb):#从各标签对应的场景中,按照最少的标签个数抽取出对应数量的场景id
idx = np.where(output == i)[0]
balanced_idx = np.random.choice(idx, size = min_Label_num, replace = False)
formal_id = formal_id + list(balanced_idx)
step_labels = output[np.array(formal_id)]
step_data = np.array(step_data)[np.array(formal_id)]

  • 写回答

6条回答 默认 最新

  • 斯曦巍峨 新星创作者: python技术领域 2022-03-09 09:39
    关注
    获得0.70元问题酬金

    Counter()方法可以统计数据集中各标签的样本的数量,然后用min()方法选择样本数量最少的类别数,这里代码均衡的意思是其它的类别也取同最小样本数类别相同的样本数,也就是for循环中干的活。np.where可以筛选出属于类别i的样本的索引,然后用np.random.choice取这些对应的索引里面取样同最小样本数量的类别同数量的样本,每个类别的样本索引都会保存到formal_id这个列表中去,step_labels是根据对应的样本索引取到对应的样本标签,step_data是根据formal_id里面对应的样本索引去取的对应的样本特征吧。
    其实这段代码挺通俗易懂的,就是需要提问者取了解numpy的特性,它可以根据一个索引数组快速取出对应的样本。还有就是查一下对应的numpy的几个API的功能,你就懂了。

    评论

报告相同问题?

问题事件

  • 系统已结题 3月16日
  • 创建了问题 3月8日