一、下采样
所有数据存在DataFrame对象df中。数据分为两类:多数类别和少数类别,数据量相差大。数据预处理已将多数类别的Label标记为1,少数类别的Label标记为0。从多数类中随机抽取样本(抽取的样本数量与少数类别样本量一致)从而减少多数类别样本数据,使数据达到平衡的方式。
import numpy as np
import pandas as pd
def lower_sample_data(df, percent=1):
percent:多数类别下采样的数量相对于少数类别样本数量的比例
data1 = df[df['Label'] == 1] # 将多数类别的样本放在data1
data0 = df[df['Label'] == 0] # 将少数类别的样本放在data0
index = np.random.randint(
len(data1), size=percent * (len(df) - len(data1))) # 随机给定下采样取出样本的序号
lower_data1 = data1.iloc[list(index)] # 下采样
return(pd.concat([lower_data1, data0]))
np.random.seed(28)
arr1 = np.random.randint(6, size=(100, 5))
arr2 = np.random.randint(1000, 1010, size=(10, 5))
columns = ['A', 'B', 'C', 'D', 'E']
df1 = pd.DataFrame(arr1, columns=columns)
df1['Label'] = 1
df2 = pd.DataFrame(arr2, columns=columns)
df2['Label'] = 0
df = pd.concat([df1, df2])
print(lower_sample_data(df))
A B C D E Label
37 4 3 0 1 4 1
41 5 5 5 4 4 1
35 5 3 2 2 5 1
69 0 0 1 0 4 1
98 2 4 5 2 0 1
78 3 3 2 4 3 1
52 2 2 1 3 3 1
43 0 0 5 5 4 1
61 5 0 1 0 5 1
86 3 2 0 1 4 1
0 1002 1005 1004 1005 1002 0
1 1007 1009 1005 1000 1003 0
2 1004 1005 1000 1003 1005 0
3 1002 1003 1000 1009 1003 0
4 1000 1002 1005 1009 1006 0
5 1001 1009 1003 1007 1003 0
6 1009 1004 1005 1007 1002 0
7 1008 1006 1009 1009 1009 0
8 1003 1007 1006 1007 1005 0
9 1001 1008 1003 1008 1003 0
二、上采样
和欠采样采用同样的原理,通过抽样来增加少数样本的数目,从而达到数据平衡的目的。一种简单的方式就是通过有放回抽样,不断的从少数类别样本数据中抽取样本,然后使用抽取样本+原始数据组成训练数据集来训练模型;不过该方式比较容易导致过拟合,一般抽样样本不要超过50%。
因为在上采样过程中,是进行是随机有放回的抽样,所以最终模型中,数据其实是相当于存在一定的重复数据,为了防止这个重复数据导致的问题,我们可以加入一定的随机性,也就是说:在抽取数据后,对数据的各个维度可以进行随机的小范围变动,eg: (1,2,3) --> (1.01, 1.99, 3);通过该方式可以相对比较容易的降低上采样导致的过拟合问题。
import SimpleITK as sitk
from scipy.ndimage.interpolation import zoom
import matplotlib.pyplot as pl...
在进行
数据
分析建模的过程中,
数据
不均
衡
是非常常见的问题,一般可以用过
采样
,欠
采样
,过
采样
+欠
采样
等发放处理。如SMOTE算法,通过插值生成合成样本,非直接对少数类进行重
采样
,从而使得少数类样本的特征空间得到扩展,有助于模型更好地探索和学习少数类的特征,提高模型的性能。如随机欠
采样
,随机从多数类样本中抽取一部分
数据
进行删除,随机欠
采样
有一个很大的缺点是未考虑样本的分布情况,而
采样
过程又具有很大的随机性,可能会误删多数类样本中一些重要的信息。样本中冗余特征的数量,这些特征是从有用特征中随机组合而成的。
由于工作
数据
量较大,训练模型很少直接单机
python
,一般都采用SparkML,最近把SparkML的工作使用
python
简单的写了一下,先写个上下
采样
,最终目的是为了让正负样本达到均
衡
(有人问:正负样本必须是1:1吗?1:1效果就一定最好吗?答:不一定)
数据
准备
共20条
数据
,正样本1共有5条,负样本0共有15条。
基础知识准备
如何获取dataframe的行数
pandas.DataFrame.shape 返回
数据
帧的形状
df.shape[0] 返回行数
de.shape[1] 返
本文主要是对
不平
衡
(不均
衡
)
数据
的一些方法进行搜索学习, 包括但不限于下
采样
(under sampling)、过
采样
(over sampling)的方法及
python
实现
缩小图像(或称为下
采样
(subsampled)或降
采样
(downsampled))的主要目的有两个:1、使得图像符合显示区域的大小;2、生成对应图像的缩略图。
放大图像(或称为上
采样
(upsampling)或图像插值(interpolating))的主要目的是放大原图像,从而可以显示在更高分辨率的显示设备上。对图像的缩放操作并不能带来更多关于该图像的信息, 因此图像的质量将不可避免地受到影响。然...
如果
数据
文件来自link,问题是某些缺少的值是?.所以必要的参数na_values='?'.dataset = pd.read_csv('household_power_consumption.txt',sep=';',header=0,low_memory=False,infer_datetime_format=True,parse_dates={'datetime': [0,1]}, #Da...
分类问题中,经常会碰到类别极度
不平
衡
的情况,这个时候可对样本进行上下
采样
,让训练
数据
集的类别接近平
衡
即可。
数据
格式是一个dataframe,
数据
分为两类:多数类别和少数类别,
数据
量相差大。一般而言一个
数据
集中负样本数量远远大于正样本,故
数据
预处理已将多数类别的Label标记为0,少数类别的Label标记为1。以下分别是
python
实现
采样
代码
:
一.下
采样
下
采样
则是从多数量的类别中随机抽取样本(抽取的样本数量与少数类别样本量一致)从而减少多数量的类别样本
数据
,使
数据
达到平
衡
的方式。
impor
在
数据
挖掘中,经常会存在
不平
衡
数据
的分类问题,比如在异常监控预测中,由于异常就大多数情况下都不会出现,因此想要达到良好的识别效果普通的分类算法还远远不够,这里介绍几种处理
不平
衡
数据
的常用方法及对比。
def upconv2x2(in_channels, out_channels, mode='transpose'):
if mode == 'transpose':
# 这个上采用需要设置其输入通道,输出通道.其中kernel_size、stride
# 大小要跟对应下
采样
设置的值一样大小。这样才...