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 ...
随机推荐
- go 交叉编译遇到的错误, 有路由方法却找不到。
panic: 'OrderCancel' method doesn't exist in the controller Controller今天线下能正常编译,到线上却panic了.发现是自己导入了i ...
- Linux系统编程(十)线程池
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <pthread.h& ...
- WPF开发快速入门【4】自定义控件与用户控件
概述 本文描述WPF的自定义控件和用户控件. 自定义控件 前面文章介绍了WPF的ControlTemplate,当我们对系统控件自带的样式不太满意时,我们可以通过控件模板自定义用户的样式,以Butto ...
- leetcode阶段总结
1.目前已经刷了大概200道题目 主要使用的语言是python,刷完之后,发现盲写部分语法依然记不住: 以后刷算法保持一个原则,一定使用不提示代码的工具,纯文本编写,尽量不debug 2.后续尽量使用 ...
- 🐞vue兄弟组件中方法互相调用
场景:父组件中同时引入两个子组件(A和B),此时B组件点击按钮需要调用A组件里面的方法 方案1:vue的事件总线 方案2:自定义事件($emit) 最终方案:方案2 父组件 具体操作 B组件上添加一个 ...
- 01-布局扩展-用calc来计算实现双飞翼布局
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...
- 利用nodejs的require.context来实现不用写impor导入组件
先给你们看下目录结构 stuendt和teacharts还有util是同级 主要是componentRegister.js文件 function changStr(str) { return str. ...
- vue组件 定义全局组件
组件 (Component) 是 Vue.js 最强大的功能之一,它是html.css.js等的一个聚合体. 组件化 将一个具备完整功能的项目的一部分分割多处使用 加快项目的进度 可以进行项目的复用 ...
- work07
day08作业: 必做题:============================================================ 第一题: 定义一个字符串s = "Hell ...
- 苹果应用商店上传应用卡在了“Authenticating with the iTunes Store”
在终端中依次运行下面代码 cd ~ mv .itmstransporter/ .old_itmstransporter/ "/Applications/Xcode.app/Contents/ ...