【python】数据重采样技巧:自定义概率分布采样

碎碎念

近期做数据处理的时候准备尝试下根据标签分布构建自定义采样概率来缓解data imbalance问题。
举个例子,比如有一个标签类别
年龄 = {幼年, 青年, 中年, 老年},某场景下标签分布为 {100, 4000, 8000, 2000},构建一种自定义采样概率 {0.528, 0.155, 0.122, 0.195},如何依据这种自定义概率分布进行多次采样呢?

函数

random.choices(population, weights=None, *, cum_weights=None, k=1)

  • population: Seq(*) 采样元素集群
  • weights: Seq(int/float) 采样权重分布
    注意: 这里weights可以是整形或浮点型,自带归一化后处理
    比如 weights=[100,200,300] 等价于 [100/(100+200+300), …]
  • cum_weights: Seq(int/float)累计采样权重分布
    比如 cum_weights = [0.2, 0.4, 0.6, 0.8, 1.0] 等价于 weights = [0.2, 0.2, 0.2, 0.2 ,0.2]
  • k: int # 采样次数

举例

import random
# 标签
label_list = ['幼年', '青年', '中年', '老年']
# 自定义概率分布
porb_dist = [0.528, 0.155, 0.122, 0.195]
# 采样次数
sample_num = 10
sample_list = random.choices(label_list, weights=porb_dist, k=sample_num)

采样10次结果

[‘幼年’, ‘老年’, ‘青年’, ‘老年’, ‘中年’, ‘幼年’, ‘青年’, ‘幼年’, ‘幼年’, ‘青年’]

这样可以很方便的依照自己定义的概率分布进行多次采用,简单实用

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值