可否请教一下大家这个样本均衡的代码如何理解,谢谢
#进行基本的样本均衡
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)]
深度学习样本均衡问题
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
6条回答 默认 最新
关注获得0.70元问题酬金 Counter()方法可以统计数据集中各标签的样本的数量,然后用min()方法选择样本数量最少的类别数,这里代码均衡的意思是其它的类别也取同最小样本数类别相同的样本数,也就是for循环中干的活。np.where可以筛选出属于类别i的样本的索引,然后用np.random.choice取这些对应的索引里面取样同最小样本数量的类别同数量的样本,每个类别的样本索引都会保存到formal_id这个列表中去,step_labels是根据对应的样本索引取到对应的样本标签,step_data是根据formal_id里面对应的样本索引去取的对应的样本特征吧。
其实这段代码挺通俗易懂的,就是需要提问者取了解numpy的特性,它可以根据一个索引数组快速取出对应的样本。还有就是查一下对应的numpy的几个API的功能,你就懂了。解决 无用评论 打赏 举报