Python 按分类权重(区间)随机获取分类样本
按分类权重(区间)随机获取分类样本
By:授客 QQ:1033553122
开发环境
win 10
python 3.6.5
需求
活动抽奖,参与抽奖产品有iphone, 华为,小米,魅族,vivo,三星手机,要求为这些不同品牌的手机设置被抽奖的概率(基准概率,非绝对概率,即允许存在一定偏差),iphone为0,华为0.35,小米为0.25, 魅族0.1,vivo和三星为0.15
代码实现
#!/usr/bin/env python
# -*- coding:utf-8 -*- __author__ = 'shouke' import random def get_sample_by_rate(sample_rate_list): if sum([item[1] for item in sample_rate_list]) != 1:
raise ValueError("样本比例配置错误,样本占比之和必须为1!") random_normalized_num = random.random() # random() -> x in the interval [0, 1).
accumulated_probability = 0.0
for sample, probabilitie in sample_rate_list:
accumulated_probability += probabilitie
if random_normalized_num < accumulated_probability:
return sample award_dict = {'iphone':0, '华为':0.35, '小米':0.25, '魅族':0.1, 'vivo':0.15, '三星':0.15} # 初始化
output_dict = {} # 存放取样次数
for sample, rate in award_dict.items():
output_dict[sample] = 0 award_list = sorted(award_dict.items(), key=lambda arg:arg[1], reverse=False) n = 1000 # 取样总次数
for i in range(n):
award = get_sample_by_rate(award_list)
output_dict[award] += 1 percentage_dict = {key: output_dict[key]/n for key in output_dict} # 存放样本数占比 print(output_dict)
print(percentage_dict)
运行结果

注意
为啥可以用python的randowm函数来实现这个需求?那是因为python的random函数是平均分布函数,产生的随机数是等可能的。如下,可以把[0,1)区间看作一条线,生成的随机数可以看作是线条上一个个点,这样,就可以根据这个点所在位置,把这个点划分到某个区间(本例中划分了几个区间[0, 0.1),[0.1,0.25),[0.25,0.4),[0.4, 0.65),[0.65,1)),映射样本的概率范围
0 0.25 0.5 1
|--------|--------|----------------|
从运行结果来看,不难看出,这种计算方式存在一定的偏差,比较适合大数据
Python 按分类权重(区间)随机获取分类样本的更多相关文章
- php获取分类以下的全部子类方法
获取分类以下的全部子类方法: static function getMenuTree($arrCat, $parent_id = 0, $level = 0,$all=True) { static $ ...
- MySQL 获取子分类ID的所有父分类ID和Name的集合
CREATE DEFINER=`sa`@`%` PROCEDURE `proc_Product_leimu_ParentIds`( IN pID INT ) BEGIN ) vars, product ...
- wordpress 获取分类ID,分类标题,分类描述,分类链接url函数
get_cat_ID() 根据分类名称获取分类ID ///// get_cat_name() 根据分类ID获取分类名称 用法:<?phpget_cat_ID( $cat_name ...
- php 两种获取分类树的方法
php 两种获取分类树的方法 1. /** * 获取分类树 * @param array $array 数据源 * @param int $pid 父级ID * @param int $level 分 ...
- dt开发之-自定义函数获取分类名称
需要在api/extend.func.php 文件中加入的函数 获取分类名称 cat_name($catid) 传入分类id function cat_name($catid) { global $d ...
- R语言分类算法之随机森林
R语言分类算法之随机森林 1.原理分析: 随机森林是通过自助法(boot-strap)重采样技术,从原始训练样本集N中有放回地重复随机抽取k个样本生成新的训练集样本集合,然后根据自助样本集生成k个决策 ...
- 【Python数据挖掘】决策树、随机森林、Bootsing、
决策树的定义 决策树(decision tree)是一个树结构(可以是二叉树或非二叉树).其每个非叶节点表示一个特征属性上的测试,每个分支代表这个特征属性在某个值域上的输出,而每个叶节点存放一个类别. ...
- Python 利用 BeautifulSoup 爬取网站获取新闻流
0. 引言 介绍下 Python 用 Beautiful Soup 周期性爬取 xxx 网站获取新闻流: 图 1 项目介绍 1. 开发环境 Python: 3.6.3 BeautifulSoup: ...
- SQL Server中的RAND函数的介绍和区间随机数值函数的实现
工作中会遇到SQL Server模拟数据生成以及数值列值(如整型.日期和时间数据类型)随机填充等等任务,这些任务中都要使用到随机数.鉴于此,本文将对SQL Server中随机数的使用简单做个总 ...
- Python学习总结7:随机字符串和随机数
Python生成随机数与随机字符串,需要import random模块.random模块最常用的几个函数如下: 1. random.random(a, b) 用于生成一个0到1的随机符点数: 0 &l ...
随机推荐
- 异构数据源同步之数据同步 → datax 再改造,开始触及源码
开心一刻 其实追女生,没那么复杂 只要你花心思,花时间,陪她聊天,带她吃好吃的,耍好玩的,买好看的 慢慢你就会发现什么叫做 打水漂 不说了,我要去陪她看电影了 前情回顾 异构数据源同步之数据同步 → ...
- C语言打印数字前补0
1.要求说明 例如有个数据为a = 0x10,要求打印输出为0x000010. 2.实现 1 #include <stdio.h> 2 3 4 int main() 5 { 6 int a ...
- C# asp.net mvc 创建虚拟目录
使用背景: 虚拟目录(virtual directory),计算机术语,每个 Internet服务可以从多个目录中发布.通过以通用命名约定 (UNC) 名.用户名及用于访问权限的密码指定目录,可将每个 ...
- 鼠标悬浮显示鼠标停留数据的内容 elementui + vue
先看效果图 直接上代码 <el-tabs v-model="activeName" @tab-click="handleClick"> <el ...
- 算法学习笔记(46): 离散余弦变换(DCT)
前置知识:离散傅里叶变换 傅里叶变换在上文中更多的是 OI 中的理解以及应用.但是傅里叶变换奥秘还很多. 回顾 \(\omega_n\) 在傅里叶变换中的定义:\(e^{i \frac {2\pi} ...
- CF98C Help Greg the Dwarf 题解
CF98C Help Greg the Dwarf 题解 为什么不三分? 首先我们考虑如何求出答案. 如图,考虑设夹角为 \(\theta\),那么可以得到表达式: \[[\cfrac a {\tan ...
- LeetCode 690. Employee Importance 员工的重要性(C++/Java)
题目: You are given a data structure of employee information, which includes the employee's unique id, ...
- 剑指Offer-60.把二叉树打印成多行(C++/Java)
题目: 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. 分析: 层次打印二叉树,在打印二叉树结点的同时,保存好结点的左右孩子,不断的重复打印,直到需要打印的数组为空即可. 程序: C ...
- kettle从入门到精通 第四十八课 ETL之kettle webspoon
1.kettle自带的客户端spoon工具是cs架构,多人协同办公起来不是特别方便.当然spoon也可以通过文件仓库设置为database模式进行协同办公.每个人在自己电脑上安装&打开spoo ...
- 使用 OpenTelemetry 构建可观测性 03 - 导出
上一个博文中,我提到如何使用 OpenTelemery 的特定语言 API 来收集遥测数据,包含手动和自动的埋点技术,这很重要!但是,收集遥测数据只是解决方案的第一步. 你需要把遥测数据路由转发到其他 ...