cut与分层抽样

news2024/11/26 2:56:20

个人觉得, 把分层抽样称为“分类采样”会更贴切一些。通常最基本的采样手段是:随机抽样,但是在很多场景下,随机抽样是有问题的,举一个简单的例子:如果现在要发起一个啤酒品牌知名度的调查问卷,我们能使用随机抽样来筛选参与调查的候选人吗?答案是否定的,因为性别在这个调研的目标人群中发挥着显著的影响,不能进行随机抽样,否则抽样数据将“严重失真”,并不能反映真实的数据分布,此时应该性别进行分层抽样,增大男性在抽样中的比例。

当数据的“某些特征”对数据分布有显著影响时,就应考虑是否要将这些特征纳入到分层抽样的范围中了。在《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 StratifiedShuffleSplit

split = 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]

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/116049.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Improved Unsupervised Lexical Simplification with Pretrained Encoders 论文精读

Improved Unsupervised Lexical Simplification with Pretrained Encoders 论文精读InformationAbstract1 Introduction2 System Description2.1 Simplification Candidate Generation2.2 Substitution Ranking2.3 Obtaining Equivalence Scores3 End-to-end System Performanc…

好书推荐《C++17 in Detail》

无意中发现作者的博客(https://www.cppstories.com/)和这本书。这本书算是对C17新增特性较为全面的介绍,而且从实战出发,不流于语法细枝末节,简洁清晰,可以作为Scott Meyers那本非著名的《Effective Modern…

2022环境电器年度行业分析报告:洗地机同比增长357%,扫地机器人销量197万+

在当前的大环境下,人们的消费观念不断变化,健康因素在购买决策中的比重逐渐增大,因此,与此挂钩的环境电器行业也迎来发展变化。 在这里,鲸参谋也综合了京东平台环境电器中一些重点类目的销售数据,主要包括吸…

Krita像素画教程

Krita Windows 上一款自由开源的绘画软件 Krita 是一款自由开源的免费绘画软件,使用 GPL 许可证发布。它的功能齐全,能胜任从起草、勾线、上色到最终调整的所有绘画流程,可以绘制概念草图、插画、漫画、动画、接景和 3D 贴图,支持…

云服务器部署内网穿透映射本地服务

项目开发时需要和前端联调,考虑使用内网穿透避免每次上传服务部署的过程 下载frp (开源内网穿透、反向代理工具) https://github.com/fatedier/frp/releases/上传云服务器并解压(使用xftp等工具上传) tar -zxvf frp_0…

尚硅谷JavaWeb教程

1、Servlet Server Applet 全称为:Java Servlet是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类。 1.1、Ser…

李沐精读论文:DETR End to End Object Detection with Transformers

论文: End-to-End Object Detection with Transformers 代码:官方代码 Deformable DETR:论文 代码 视频:DETR 论文精读【论文精读】_哔哩哔哩_bilibili 本文参考: 山上的小酒馆的博客-CSDN博客 端到端目标检测DETR…

【javaSE】类和对象

希望各位老铁三连支持! 文章目录 # 关于面向对象# 类的定义和使用# 构造方法的创建和初始化# 封装## 封装的概念## 访问限定符## 封装包的各种用法# 关键字static# 代码块一、关于面向对象 1.1面向对象的定义 简单来说,面向对象就是一种编程的思想&…

Compose 为什么可以跨平台?

这是我在 2022 Kotlin 中文开发者大会 中带来的一个分享,会后有网友反馈希望将 PPT 内容整理成文字方便阅读,所以就有了本篇文章。大家如果要了解本次大会更多精彩内容,也可以去 JetBrains 官方视频号查看大会的直播回放。 前言 Compose 不止…

Bean的生命周期流程-上

Bean的生命周期流程-上引言getBeangetSingletoncreateBean后置处理器类型区分doCreateBeancreateBeanInstance 是如何创建bean的实例的引言 Spring拥有一套完善的Bean生命周期体系,而使得这套生命周期体系具有高扩展性的关键在于Bean生命周期回调接口,通过这些接口…

层次分析法(AHP)

主要来解决评价类问题 什么是评价类问题:选择哪种方案最好,哪位运动员表现的更优秀。 评价类问题可以用打分解决 同一颜色的单元格权重之和为1 解决评价类问题,大家首先要想到以下三个问题: 1.我们评价的目标是什么&#xff1…

FineReport数据可视化图表-配置MySQL8外接数据库(1)

1. 概述 1.1 版本 报表服务器版本 功能变更 11.0 - 11.0.3 1)首次配置外接数据库时,支持自行选择是否「迁移数据至要启用的数据库」 2)迁移外接数据库的过程提示细化,方便用户了解迁移进度 1.2 功能简介 报表系统配置外接数…

USB TYPE C为什么能实现正反插

USB TYPE C接口在手机,电脑等移动终端中使用的非常多,它可以分为插头和插座,放在PCB板上一般是插座。 USB TYPE C的插座和插头引脚信号定义大家可以看下。引脚分为两排,上面一排是A,下面一排是B。标准的USB TYPE C总共…

YOLOV5融合SE注意力机制和SwinTransformer模块开发实践的中国象棋检测识别分析系统

本文紧接前文: 《基于yolov5s实践国际象棋目标检测模型开发》 《yolov5s融合SPD-Conv用于提升小目标和低分辨率图像检测性能实践五子棋检测识别》 首先来看下最终效果: 在我棋类检测系统开发之——五子棋检测那篇博文写完之后就萌生了想做一下基于目标…

WebDAV之葫芦儿·派盘+BubbleUPnP

BubbleUPnP 支持WebDAV方式连接葫芦儿派盘。 推荐一款投屏神器,它将手机内容分享到电视大屏上与家人好友一起共享,软件还提供了丰富的音乐及影视资源,喜欢的内容在线搜索就能播放。支持连接葫芦儿派盘WebDAV服务站,可以直接播放派盘内的影视资源。 BubbleUPnP是一款支持U…

水文监测系统-水文监测站构成 设备 功能 特点介绍以及案例分享

平升电子水文监测系统实现对江河流域水位、降水量、流量、流速、水质、闸门开启度、墒情等数据的实时采集、报送和处理。为防汛抗旱减灾提供科学依据和有效信息共享,保障人民群众生命财产安全,满足水利和经济社会发展对水文服务的需求。 2022年1月&#…

web前端-javascript-百炼成仙(第1节掌握JavaScript基础1.1-1.21)

文章目录1.1 第一章 初入宗门1.2 第二章 直接量1.3 第三章 数据类型1.4 第四章 数据类型扩展内容:1.5 第五章 基础考核1.6 第六章 何老1.7 第七章 对象数据类型1.8 第八章 对象的取值1.9 第九章 循环遍历的奥妙小结:For 循环1.10 第十章 对象内容的遍历1.11 第十一章…

Linux软件包管理之rpm与yum

Linux软件包管理之rpm与yum1.Linux rpm 命令2.rpm包的管理3.yum包管理(强推)1.Linux rpm 命令 Linux rpm 命令用于管理套件。 rpm(英文全拼:redhat package manager) 原本是 Red Hat Linux 发行版专门用来管理 Linux…

高端运动耳机哪个品牌最好、最好的运动耳机品牌排行

蓝牙耳机近几年受到市场的欢迎,种类越来越多,各类功能也日益五花八门,消费者很难准确的进行分辨,一不小心可能买到华而不实的产品。现在了解一下值得入手的蓝牙耳机,从多个角度对蓝牙耳机进行评估后,得出以…

android 权限常见错误,onRequestPermissionsResult回调不执行问题

今天在调试一个fragment时,申请到权限,然后在权限回调里面做相应的dialog提示用户,但是发现一直无弹窗。 话不多说,直接上问题代码 private void testRxPermissions() {ActivityCompat.requestPermissions(this.getActivity(), ne…