python 下采样和上采样
前言
由于工作数据量较大,训练模型很少直接单机python,一般都采用SparkML,最近把SparkML的工作使用python简单的写了一下,先写个上下采样,最终目的是为了让正负样本达到均衡(有人问:正负样本必须是1:1吗?1:1效果就一定最好吗?答:不一定)
数据准备
共20条数据,正样本1共有5条,负样本0共有15条。
基础知识准备
- 如何获取dataframe的行数
pandas.DataFrame.shape 返回数据帧的形状
df.shape[0] 返回行数
de.shape[1] 返回列数
或者直接使用
len(df)
当然如果要统计每个字段不同类别的数量,可以类似于SQL中的count(*) group by 操作
df.groupby('字段名').size()
- 创建一个数据结构和之前一致,但空的dataframe
方法1:
df = df.iloc[0:0].copy()
方法2:
df.drop(df.index, inplace=True)
方法3:
df_1 = df.drop(range(len(df)),axis=0)
读取数据和获取正负样本数量
import pandas as pd
data = pd.read_csv('./test.csv')
# 获取正样本的数量
z = data[data['label'] == 1]
# 获取负样本的数量
f = data[data['label'] == 0]
上采样
就是不断复制样本少的数据达到和样本多的数据平衡
frac = int(len(f) / len(z))
# 创建一个数据结构和之前一致,但空的dataframe
zcopy = z.iloc[0:0].copy()
# 上采样就是复制少量的样本直到和多量的达到平衡
for i in range(frac):if i != frac:zcopy = zcopy.append(z)
sample_data = pd.concat([zcopy,f])
查看采样的结果:
下采样
下采样就是从多量的样本中抽取一部分数据直到和少量的样本达到平衡
- 利用dataframe的sample方法
frac = float(len(z) / len(f))
# 下采样就是从多量的样本中抽取一部分数据直到和少量的样本达到平衡
sample_data = pd.concat([f.sample(frac=frac),z])
结果:
2. 利用np.random.choice() (个人感觉有点繁琐,不推荐)
import numpy as np
# 得到所有正样本的索引
z_index = np.array(z.index)
# 下采样就是从多量的样本中抽取一部分数据直到和少量的样本达到平衡,并取其索引
random_f_index = np.random.choice(f.index,len(z),replace = False)
random_f_index = np.array(random_f_index)
# 有了正样本负样本后把它们的索引都拿到手
under_sample_indices = np.concatenate([z_index,random_f_index])
# 根据索引得到下采样所有样本点
under_sample_data = data.iloc[under_sample_indices,:]
结果:
python 下采样和上采样相关推荐
- 机器学习(四) 下采样和上采样
查看数据样本 import pandas as pd import matplotlib.pyplot as plt import numpy as np%matplotlib inlinedata ...
- 【图像处理】——改变图像的大小(降采样重采样)下采样和上采样
转载自:https://jingyan.baidu.com/article/a3a3f81139be1f8da2eb8ade.html 上采样.下采样和金字塔加速参考:https://blog.csd ...
- 降采样和上采样(图像)
https://blog.csdn.net/u013146742/article/details/51865522 降采样 又名 下采样或缩小图像.即是采样点数减少.对于一幅N*M的图像来说,如果降采 ...
- 下采样downsamp和上采样upsample
图像的上采样(up-sampling)和下采样(down-sampling) 缩小图像(或称为下采样(subsampled)或降采样(downsampled)的主要目的有两个: 1.使得图像符合显示区 ...
- 一个不限制插值个数和上采样倍数的视频增强方法
作者单位:麦克马斯特大学 论文:https://arxiv.org/pdf/2102.13011.pdf 看点 近年来,大量的视频增强研究致力于同时提高时间帧速率和空间分辨率,这些方法要么不能揭示时空 ...
- Python中的图像处理(第六章)Python图像量化及采样处理(2)
Python中的图像处理(第六章)Python图像量化及采样处理(2) 前言 一. Python准备 二. Python仿真 三. 小结 前言 随着人工智能研究的不断兴起,Python的应用也在不断上 ...
- (54)Verilog HDL下升沿采样
(54)Verilog HDL下升沿采样 1.1 目录 1)目录 2)FPGA简介 3)Verilog HDL简介 4)Verilog HDL下升沿采样 5)结语 1.2 FPGA简介 FPGA(Fi ...
- word2vec实例详解python_在python下实现word2vec词向量训练与加载实例
项目中要对短文本进行相似度估计,word2vec是一个很火的工具.本文就word2vec的训练以及加载进行了总结. word2vec的原理就不描述了,word2vec词向量工具是由google开发的, ...
- Oracle优化07-分析及动态采样-动态采样
思维导图 07系列文章 Oracle优化07-分析及动态采样-直方图 Oracle优化07-分析及动态采样-DBMS_STATS 包 Oracle优化07-分析及动态采样-动态采样 动态采样Dynam ...
最新文章
- 使用ajax不刷新页面获取、操作数据
- [亿能测试_www.gdtesting.com]测试技术资料网盘共享
- 清华《人工智能之认知图谱》:中美高水平学者数量领跑全球
- HTML5学习笔记(十四):变量作用域
- jQuery+Ajax+PHP 制作简单的异步数据传输(测试用户名是否可用)
- 使用循环语句判定用户账号密码输入三次是否正确
- 根据测试路径自动生成测试用例_自拍教程75Python 根据测试用例选择测试资源
- 程序编写经验教训_编写您永远都不会忘记的有效绩效评估的经验教训。
- 计算abc=a!+b!+c!
- 运行npm install命令后的执行过程
- String 和 StringBuffer 的区别
- CV进阶 -- 目标检测原理及代码实现、YOLO源码解读学习
- 新库上线 | CnOpenData中国工业企业绿色专利及引用被引用数据简介
- flink如何设置以每天零点到第二天零点为区间的window进行计算
- ElasticSearch入门教程(1)
- ubuntu20.04未找到Wi-Fi适配器
- 自动测试如何选择自动化测试框架_机器擅长回归测试,人类善于寻找Bug _Pekka Klärck
- 快速排序 php内存超限,数据结构与算法设计
- 小周资源导航站——导航站
- 微信小程序之触摸滑动事件案例+Slideview组件【手动左滑删除效果】