相关文章推荐
礼貌的高山  ·  Layabox ...·  10 月前    · 

一、下采样

所有数据存在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 # 大小要跟对应下 采样 设置的值一样大小。这样才...