抽样偏差(Sampling Bias)与 分层抽样(Stratified Sampling)

2023-10-06 23:59

本文主要是介绍抽样偏差(Sampling Bias)与 分层抽样(Stratified Sampling),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

个人觉得, 把分层抽样称为“分类采样”会更贴切一些。通常最基本的采样手段是:随机抽样,但是在很多场景下,随机抽样是有问题的。最简单也最有说服力的例子就是身高和体重在性别上的差异,在对它们进行抽样时必须考虑性别因素。我们可以粗略地说:女性的身高符合165为中心的正态分布,体重符合50公斤为中心的正态分布,而男性身高则可能是175为中心的正态分布,体重是60公斤中心的正态分布。还有一些示例未必那么明细,需要一定的统计数据支持和业务知识来发现。例如:如果现在要发起一个啤酒品牌知名度的调查问卷,我们能使用随机抽样来筛选参与调查的候选人吗?答案是否定的,因为性别在这个调研的目标人群中发挥着显著的影响,不能进行随机抽样,否则抽样数据将“严重失真”,并不能反映真实的数据分布,此时应该性别进行分层抽样,增大男性在抽样中的比例。

当数据的“某些特征”对数据分布有显著影响时,就应考虑是否要将这些特征纳入到分层抽样的范围中了。在《Hadnson ML》一书第二章中提到这样一个案例:一个非常直白的认知是:一个地区的收入中值与该地区的房价是有密切关系的。在提取训练数据集时,如果采用随机抽样,就抹掉了收入水平在房屋价格中发挥的显著作用,这种随机抽取的样本已经发生了“失真”,则预测结果就很难精准了。所以,作者提出:应该按收入水平进行分层采样。

进行分层采样的前提是目标属性往往是类别化的离散值,对于那些连续的数值型属性,通常需要进行一下“预处理”:把连续的数值型数据转换为离散的类别型数据。在Pandas的DataFrame中,有一个方法cut:https://pandas.pydata.org/docs/reference/api/pandas.cut.html#pandas.cut 就是专门负责这种处理的。请看如下的示例:

import pandas as pd
import numpy as np
info_nums = pd.DataFrame({'num': np.random.randint(1, 100, 5)})
print(info_nums)
info_nums['num_bins'] = pd.cut(x=info_nums['num'], bins=[1, 50, 100])
print('---------------')
print(info_nums)
print('---------------')
info_nums['num_bins'] = pd.cut(x=info_nums['num'], bins=[1, 50, 100], labels=['Lows', 'Highs'])
print(info_nums)

输出结果如下:

   num
0   79
1    9
2   71
3   90
4   24
---------------num   num_bins
0   79  (50, 100]
1    9    (1, 50]
2   71  (50, 100]
3   90  (50, 100]
4   24    (1, 50]
---------------num num_bins
0   79    Highs
1    9     Lows
2   71    Highs
3   90    Highs
4   24     Lows

从测试代码可知:

  • bins给出连续的数组区间,落在区间内的值被归为一类,例如:bins=[1, 50, 100]意味:1-50是一个区间,50-100是一个区间,79会落在(50, 100]的区间上,9会落到(1, 50]的区间上
  • labels会针对每一个区间起一个别名,例如:labels=['Lows', 'Highs']意味:(1, 50]的区间将被称为Lows,(50, 100]的区间将被称为Highs。使用了labels之后,落地的值就将变成注的离散值了。

接下来我们看一下《Hadnson ML》一书中的例子:

housing["income_cat"] = pd.cut(housing["median_income"],bins=[0., 1.5, 3.0, 4.5, 6., np.inf],labels=[1, 2, 3, 4, 5])

参考前面的例子可知:(0, 1.5]区间内的值将被标记为1, (1.5, 3.0]区间内的值将被标记为2,依次类推。

获得收入“收入等级”分类列之后,我们会可以依据离散的收入分类进行分层抽样了。对此,Scikit-Learn也提供了现成的函数:

from sklearn.model_selection import StratifiedShuffleSplitsplit = StratifiedShuffleSplit(n_splits=1, test_size=0.2, random_state=42)
# 不同于train_test_split,StratifiedShuffleSplit在切分时还需要指定分类列,算法会参考
# 每一个分类在总体中所占的比列(份额)来对数据进行抽样,以避免抽样过程中出现“失真”
for train_index, test_index in split.split(housing, housing["income_cat"]):strat_train_set = housing.loc[train_index]strat_test_set = housing.loc[test_index]

完成抽样后,我们可以分别检测一下测试数据集与全体数据集中收入分类的分布状况,如果它们保持一致的比重,则说明分层抽样没有问题:
在这里插入图片描述

这篇关于抽样偏差(Sampling Bias)与 分层抽样(Stratified Sampling)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/154750

相关文章

自控原理-传递函数(闭环 扰动 偏差 前馈 复合 顺馈)

都知道闭环传递函数定义为:G1·G2/(1+G1·G2·H) 但是当碰到复杂的系统,比如复合顺馈,前馈扰动等,就不知道分子到底要不要乘上G2了。 这个公式是如何推导出来的,今天看到一个公式图片: 过程非常详细。 由此我也分别针对: 闭环扰动系统的传递函数和偏差传递函数问题 前馈扰动系统的误差分析 复合顺馈系统的误差分析 这三类问题给出了相应的解答方案。 闭环扰动系统的

方差(Variance) 偏差(bias) 过拟合 欠拟合

机器学习中方差(Variance)和偏差(bias)的区别?与过拟合欠拟合的关系?   (1)bias描述的是根据样本拟合出的模型的输出预测结果的期望与样本真实结果的差距,简单讲,就是在样本上拟合的好不好。 低偏差和高方差(对应右上图)是使得模型复杂,增加了模型的参数,这样容易过拟合。 这种情况下,形象的讲,瞄的很准,但手不一定稳。 (2)varience描述的是样本上训练出来的模型

微信小程序 接口数据监控 偏差比率是什么意思

缓存就是类似数据库,全局变量就是所有页面都能用,这是两个东西,比如说新闻应用,首页的数据需要放到缓存里,然后下次访问首页的时候直接加载缓存的数据,然后在异步调用接口刷新数据,这样在进入首页的时候就不需要loading了,直接能看到数据,感觉就是秒开,用户体验更好一些,全局变量就是类似用户登录信息,登录之后设置成全局的,每个页面都可以使用,不然跳转后就需要每次都重新获取用户信息

【数字时序】时钟树延迟偏差——CPPR adjustment

接上一篇文章Innovus的时序报告解读,新版的貌似多了一些信息,比如CPPR Adjustment和Derate。不太清楚这两个是什么概念,搜索之后转载2篇后端工程师的博客如下: 搜到个这个网站好像有很多后端相关的知识点分享一哈: Common Path & Clock Reconvergence Pessimism Removal - VLSI Pro VLSI Pro - VLSI

吴恩达机器学习课后作业-05偏差与方差

偏差与方差 题目欠拟合改进欠拟合影响偏差和方差因素训练集拟合情况训练集和测试集代价函数选择最优lamda 整体代码 训练集:训练模型 ·验证集︰模型选择,模型的最终优化 ·测试集:利用训练好的模型测试其泛化能力 #训练集x_train,y_train = data['X'],data[ 'y']#验证集x_val,y_val = data['Xval'],dat

回归分析系列18— 平衡偏差与方差

22 平衡偏差与方差 22.1 偏差-方差权衡简介 在模型构建中,我们通常面临偏差(bias)与方差(variance)之间的权衡。偏差是指模型的预测与真实值之间的系统性误差,而方差则是指模型在不同训练集上的波动性。 高偏差通常意味着模型过于简单,无法捕捉数据中的复杂模式(即欠拟合);高方差则意味着模型对训练数据过于敏感,导致在新数据上表现不佳(即过拟合)。 22.2 正则化与偏差-方差

FouriDown: Factoring Down-Sampling into Shuffling and Superposing

摘要 https://openreview.net/pdf?id=nCwStXFDQu 空间下采样技术,如步长卷积、高斯下采样和最近邻下采样,在深度神经网络中至关重要。在本文中,我们重新审视了空间下采样家族的工作机制,并分析了先前方法中使用的静态加权策略所引起的偏差效应。为了克服这种偏差限制,我们提出了一种在傅里叶域中的新型下采样范式,简称FouriDown,它统一了现有的下采样技术。受信号采

点云处理中阶 Sampling

目录 一、什么是点云Sampling 二、示例代码 1、下采样  Downsampling 2、均匀采样 3、上采样 4、表面重建 一、什么是点云Sampling 点云处理中的采样(sampling)是指从大量点云数据中选取一部分代表性的数据点,以减少计算复杂度和内存使用,同时保留点云的几何特征和重要信息。常见的点云采样方法有以下几种: 随机采样(Random Samp

利用DeepFlow解决APISIX故障诊断中的方向偏差问题

概要:随着APISIX作为IT应用系统入口的普及,其故障定位能力的不足导致了在业务故障诊断中,APISIX常常成为首要的“嫌疑对象”。这不仅导致了“兴师动众”式的资源投入,还可能使诊断方向“背道而驰”,从而导致业务故障“长期悬而未决”。本文通过回顾一家全球领先智能终端制造商最近处理核心业务响应延迟故障的过程,展示了“背道而驰”现象对诊断效率的巨大影响,并介绍了DeepFlow可观测性平台如何通

PyTorch 入坑十:模型泛化误差与偏差(Bias)、方差(Variance)

问题 阅读正文之前尝试回答以下问题,如果能准确回答,这篇文章不适合你;如果不是,可参考下文。 为什么会有偏差和方差?偏差、方差、噪声是什么?泛化误差、偏差和方差的关系?用图形解释偏差和方差。偏差、方差窘境。偏差、方差与过拟合、欠拟合的关系?偏差、方差与模型复杂度的关系?偏差、方差与bagging、boosting的关系?偏差、方差和K折交叉验证的关系?如何解决偏差、方差问题? 本文主要参考知