02_Numpy学习笔记(下):随机采样
文章目录
本文参考代码见gitee:https://gitee.com/hamor/ml/tree/master/numpy_notes
在做数据分析时,经常要假定数据服从某个分布,然后根据数据样本估计分布的参数,从而对数据的整体情况进行预测分析。
在对数据进行预处理时,经常加入新的操作或改变处理策略,此时如果伴随着随机操作,最好还是指定唯一的随机种子,避免由于随机的差异对结果产生影响。可以使用numpy.random.seed(seed=None)
来完成:
numpy.random.seed(seed=None)
Seed the generator.
seed() 用于指定随机数生成时所用算法开始的整数值,如果使用相同的seed() 值,则每次生成的随机数都相同,如果不设置这个值,则系统根据时间来自己选择这个值,此时每次生成的随机数因时间差异而不同。
随机变量的的分布大致可以按离散型随机变量和连续型随机变量两种情况进行分类。
(1)离散型随机变量的分布
- 二项分布
- 泊松分布
- 超几何分布
(2)连续型随机变量的分布
- 均匀分布
- 正态分布
- 指数分布
一、离散型随机变量的分布
1. 二项分布
在概率论和统计学中,二项分布(Binomial distribution)是n个独立的是/非试验中成功的次数的离散概率分布,其中每次试验的成功概率为p。这样的单次成功/失败试验又称为伯努利试验。实际上,当n = 1时,二项分布就是伯努利分布。二项分布是显著性差异的二项试验的基础。
一般地,如果随机变量
X
X
X服从参数为
n
n
n和
p
p
p的二项分布,我们记
X
∼
b
(
n
,
p
)
X\sim b(n,p)
X∼b(n,p)或
X
∼
B
(
n
,
p
)
X\sim B(n,p)
X∼B(n,p)。n次试验中正好得到k次成功的概率由概率质量函数给出:
f
(
k
,
n
,
p
)
=
Pr
(
X
=
k
)
=
(
a
b
)
p
k
(
1
−
p
)
n
−
k
f(k,n,p) = \Pr(X = k) = \begin{pmatrix} a \\ b \end{pmatrix} p^{k}(1 - p)^{n-k}
f(k,n,p)=Pr(X=k)=(ab)pk(1−p)n−k
对于k = 0, 1, 2, …, n,其中
(
n
k
)
=
n
!
k
!
(
n
−
k
)
!
{n \choose k}={\frac {n!}{k!(n-k)!}}
(kn)=k!(n−k)!n!
是二项式系数(这就是二项分布的名称的由来),又记为 C ( n , k ) C(n, k) C(n,k), n C k nC_k nCk,或 n C k ^nC_k nCk。该公式可以用以下方法理解:我们希望有k次成功 ( p k ) (p^k) (pk)和 n − k n − k n−k次失败 ( 1 − p ) n − k (1 − p)^{n − k} (1−p)n−k。然而,k次成功可以在n次试验的任何地方出现,而把 k k k次成功分布在 n n n次试验中共有 C ( n , k ) C(n, k) C(n,k)个不同的方法。
numpy.random.binomial(n, p, size=None)
Draw samples from a binomial distribution.
表示对一个二项分布进行采样, size 表示采样的次数, n 表示做了n 重伯努利试验, p 表示成功的概率,函数的返回值表示n 中成功的次数。
2. 泊松分布
泊松分布主要用于估计某个时间段某事件发生的概率。
numpy.random.poisson(lam=1.0, size=None)
Draw samples from a Poisson distribution.
表示对一个泊松分布进行采样, size 表示采样的次数, lam 表示一个单位内发生事件的平均值,函数的返回值表示一个单位内事件发生的次数。
3. 超几何分布
在超几何分布中,各次实验不是独立的,各次实验成功的概率也不等。
numpy.random.hypergeometric(ngood, nbad, nsample, size=None)
D r a w s a m p l e s f r o m a H y p e r g e o m e t r i c d i s t r i b u t i o n . Draw samples from a Hypergeometric distribution. DrawsamplesfromaHypergeometricdistribution.
表示对一个超几何分布进行采样, size 表示采样的次数, ngood 表示总体中具有成功标志的元素个数, nbad 表示总体中不具有成功标志的元素个数, ngood+nbad 表示总体样本容量, nsample 表示抽取元素的次数(小于或等于总体样本容量),函数的返回值表示抽取nsample 个元素中具有成功标识
的元素个数。
二、连续型随机变量的分布
1. 均匀分布
均匀分布可以使用以下方法产生:
numpy.random.uniform(low=0.0, high=1.0, size=None)
Draw samples from a uniform distribution.
Samples are uniformly distributed over the half-open interval [low, high) (includes low, but excludes high). In other words, any value within the given interval is equally likely to be drawn by uniform .
作为uniform()
的特列,numpy.random.rand()
可以得到[0,1) 之间的均匀分布的随机数。
-
numpy.random.rand(d0, d1, ..., dn)
**Random values in a given shape. **Create an array of the given shape and populate it with random samples from a uniform distribution over [0, 1) .
作为uniform()
的另一特例,randint()
可以得到[low,high) 之间均匀分布的随机整数。
numpy.random.randint(low, high=None, size=None, dtype='l')
Return random integers from low (inclusive) to high (exclusive).
Return random integers from the “discrete uniform” distribution of the specified dtype in the “half-open” interval [low, high). If high is None (the default), then results are from [0, low).
2. 正态分布
正态分布(normal distribution)又名高斯分布(Gaussian distribution),是一个非常常见的连续概率分布。正态分布在统计学上十分重要,经常用在自然和社会科学来代表一个不明的随机变量。
若随机变量
X
X
X服从一个位置参数为
μ
\mu
μ、尺度参数为
σ
\sigma
σ }的正态分布,记为:
X
∼
N
(
μ
,
σ
2
)
X \sim N(\mu, \sigma ^{2})
X∼N(μ,σ2)
则其概率密度函数为
f
(
x
)
=
1
σ
2
π
e
−
(
x
−
μ
)
2
2
σ
2
f(x)={\frac {1}{\sigma {\sqrt {2\pi }}}}\;e^{-{\frac {\left(x-\mu \right)^{2}}{2\sigma ^{2}}}}
f(x)=σ2π1e−2σ2(x−μ)2
正态分布的数学期望值或期望值
μ
\mu
μ 等于位置参数,决定了分布的位置;其方差
σ
2
\sigma ^{2}
σ2的开平方或标准差
σ
\sigma
σ 等于尺度参数,决定了分布的幅度。
正态分布可以使用以下方法表示:
numpy.random.normal(loc=0.0, scale=1.0, size=None)
Draw random samples from a normal (Gaussian) distribution.
其中,loc
和scale
分别为
μ
(
均
值
)
,
σ
(
标
准
差
)
\mu(均值), \sigma(标准差)
μ(均值),σ(标准差)。
也可以使用sigma * np.random.randn(...) + mu
产生正态分布的序列。
3. 指数分布
在概率论和统计学中,指数分布(Exponential distribution)是一种连续概率分布。指数分布可以用来表示独立随机事件发生的时间间隔,比如旅客进入机场的时间间隔、打进客服中心电话的时间间隔、中文维基百科新条目出现的时间间隔等等。
指数分布的概率密度函数为:
KaTeX parse error: No such environment: equation at position 8: \begin{̲e̲q̲u̲a̲t̲i̲o̲n̲}̲ f(x;\lambda) =…
其中λ > 0是分布的一个参数,常被称为率参数(rate parameter)。即每单位时间发生该事件的次数。指数分布的区间是[0,∞)。 如果一个随机变量X 呈指数分布,则可以写作:X ~ Exponential(λ)。
numpy.random.exponential(scale=1.0, size=None)
Draw samples from an exponential distribution.
三、其他随机函数
1. 随机从序列中获取元素
numpy.random.choice(a, size=None, replace=True, p=None)
Generates a random sample from a given 1-D array.
从序列中获取元素,若a 为整数,元素取值从np.range(a) 中随机获取;若a 为数组,取值从a 数组元素中随机获取。该函数还可以控制生成数组中的元素是否重复replace ,以及选取元素的概率p 。
2. 对数据集进行洗牌操作
数据一般都是按照采集顺序排列的,但是在机器学习中很多算法都要求数据之间相互独立,所以需要先对数据集进行洗牌操作。numpy
提供了两个api
:
-
numpy.random.shuffle(x)
Modify a sequence in-place by shuffling its contents.
This function only shuffles the array along the first axis of a multi-dimensional array. The order of sub-arrays is changed but their contents remains the same. -
numpy.random.permutation(x)
Randomly permute a sequence, or return a permuted range.
If x is a multi-dimensional array, it is only shuffled along its first index.
区别:shuffle(x)
对x 进行重排序,如果x 为多维数组,只沿第 0 轴洗牌,改变原来的数组,输出为None。permutation()
函数的作用与shuffle()
函数相同,可以打乱第0轴的数据,但是它不会改变原来的数组。