随机抽样法就是调查对象总体中每个部分都有同等被抽中的可能,是一种完全依照机会均等的原则进行的抽样调查,被称为是一种“等概率”.随机抽样有四种基本形式,即简单随机抽样、等距抽样、类型抽样和整群抽样.

非随机抽样的定义:指抽样时不是遵循随机原则,而是按照研究人员的主观经验或其它条件来抽取样本的一种抽样方法.

关于抽样更详细介绍的方法参见概率抽样,随机采样。

python当中实现简单随机抽样的方法有:自己纯编写代码(不方便);利用库pandas或者numpy。

此处,我用的是pandas。详细代码如下:


欠抽样代码

pandas 实现随机抽样,其中一些参数:

df.sample(n=None, frac=None, replace=False, weights=None, random_state=None,axis=None)

n:指定抽取的样本量,(这里我设定的是小类数据的1.05,即 n = N*(1+0.05))

frac:指定抽取的样本比例;

replace:是否有放回抽样,默认无放回。(对于不平衡数据欠抽样时,将replace=False)

weights:指定样本抽中的概率,默认等概论抽样;

random_state:指定抽样的随机种子,可以使得每次抽样的种子一样,每次抽样结果一样

axis:是选择抽取数据的行还是列。axis=0的时是抽取行,axis=1时是抽取列

局限: 对于多类样本不能很好的进行抽样。

解决:对于不平衡数据,使用imblearn库中的函数完成随机过采样,随机欠采样。

需要注意的一点:

1. pandas中的df是dataframe类型,它包含了所处理数据的特征和类。其中每一行代表一个instance,每一列代表一个feature,而最后一列往往是类标签。上述是一般情况,具体类标签在第一列还是最后一列,取决于你所得到的数据集是什么样的。当然,也可以根据自己的需要和习惯,将类标签放置在相应的位置。

2. 针对不平衡的数据,要实现欠抽样时,只需将replace=False,并只对大类样本进行抽样。要实现过抽样,相应的将repalce=True,并只对小类样本进行过抽样。最后将两类样本合并即可。

还有一种方法更为简单,因为用到了imblearn库中的方法。如果你没有安装这个库,可以参考怎么用python安装第三方库Imblearn,其中这个库中包含了针对不平衡数据的一些抽样方法,具体的也可以参考imblearn的官网。

首先,先导入库:


导入库的代码

第二步,调用其中库的方法:


抽样方法代码

上述方法分别是 随机过抽样、随机欠抽样、smote抽样。具体的参数可以参见官网:imblearn库的相关参数。