NumPy入门之随机抽样

@[云好晕啊]学习笔记

随机抽样

   在NumPy中的random模块对Python内置的random进行了补充,增加了一些用于高效生成多种概率分布的样本值函数,如正态分布、泊松分布等。

  • numpy.random.seed(seed=None) 种子生成函数
    seed()用于指定随机数生成时所要宝贵的算法开始的整数值,如果使用相同的seed()值,则每次生成的随机数都相同,如果不设置这个值,则系统根据时间来选择这个值,此时每次生成的随机数因时间差异而不同。
      在对数据进行预处理时,经常加入新的操作改变处理策略,此时如果伴随着随机操作,最好还是指定唯一的随机种子,避免由于随机差异对结果产生影响。

离散型随机变量

1.1 二项分布

 二项分布可以用于一次实验只有两种实验结果,个结果对应的概率相等的多次实验概率问题。比如处理猜10次拳赢6次的概率等类似问题。
 二项分布的代码表示为:binom.pmf(k)=choose(n,k)pk(1-p)(n-k)
其调用函数:
二项分布

  • numpy.random,binomial(n,p,size=None)
    

表示对一个二项分布进行采样,size表示采样次数,n表示做了n次伯努利实验,p表示成功的概率,函数的返回值表示n中成功次数。

举例代码

(1)假设在野外进行9(n=9)口石油的勘探发掘工作,每一口井能够开发出油的概率是0.1(p=0.1)。请问最终所有勘探井都勘探失败的概率?

#模拟石油勘探成功案例
np.random.seed(20201124)
n=9#某件事做的次数
p=0.1#某件事成功概率
size=50000
x=np.random.binomial(n,p,size)
'''还可以使用binom.rvs
#使用binom.rvs(n,p,size=1)函数模拟一个二项随机变量,可视化表现概率
y=stats.binom.rvs(n,p,size=size)#返回一个numpy.ndarray
'''
print(np.sum(x==0)/size)
plt.rcParams['font.sans-serif']=['SimHei']
plt.hist(x)
plt.xlabel('随机变量:成功次数')
plt.ylabel('样本中出现次数')
plt.show()
#它返回一个列表,列表中每一个元素表示随机变量中对应值得概率
s=stats.binom.pmf(range(10),n,p)
#四舍五入,保留三位小数
print(np.around(s,3))

石油勘测
(2)模拟投硬币,投两次,请问两次都为正面的概率?

#模拟抛硬币案例
np.random.seed(20201124)
n=2#拋硬币两次
p=0.5#做某件事成功概率这里指的是正面朝上,概率为0.5
size=50000
x=stats.binom.rvs(n,p,size=size)

#输出各种情况概率
print(np.sum(x==0)/size)
print(np.sum(x==1)/size)
print(np.sum(x==2)/size)

plt.hist(x,density=True)
plt.xlabel('随即变量:硬币正面朝上次数')
plt.ylabel('50000个样本中出现次数')
plt.show()
#它返回一个列表,列表每个元素表示随机变量中对应值得概率
s=stats.binom.pmf(range(n+1),n,p)
print(np.around(s,3))

抛硬币

  • 上图显示了次数的分布状况以及相应的概率输出在 控制台。

1.2 泊松分布

 泊松分布主要用于估计某个时间段某件事情发生的概率。
 泊松概率函数代码表示:poisson.pmf(k)=exp(-lam)lam**k/k!
泊松分布

numpy.random.poisson(lam=1.0,size=None)

表示对一个泊松分布进行采样,size表示采样次数,lam表示一个单位内发生事件的平均值,函数的返回值表示一个单位内事件发生的次数。

举例代码

(1)嘉定某航空公司预定票处平均每小时接到42次订票电话,那么十分钟内恰好接待6次电话的概率是多少?

import numpy as np
from scipy import  stats
import matplotlib.pyplot as plt

#用泊松概率模拟航空公司接到电话概率案例
np.random.seed(20201124)
lam=42/6#平均值:平均每十分钟接到7次电话
size=50000
x=np.random.poisson(lam,size)
'''或者
#模拟服从泊松分布的50000个随机变量
x=stats.possion.rvs(lam,size=size)
'''
print(np.sum(x==6)/size)#输出接到6次电话概率

plt.rcParams['font.sans-serif']=['SimHei']
plt.hist(x)
plt.xlabel('随机变量:每十分钟接到订票电话次数')
plt.ylabel('50000个样本中出现次数')
plt.show()
#使用possion.pmf(k,mu)求对应分布概率:概率质量函数(PMF)
x=stats.poisson.pmf(6,lam)
print(x)

航空接电话案例

  • 根据上图我们可以看到泊松分布状况,以及接到概次电话率为0.15206。

1.3超几何分布

 在超几何分布中,各次实验成功的概率也不等。超几何分布概率函数的代码表示:
超几何分布

numpy.random.hypergeometric(ngood,nbad,nsample,size=None)
  • 表示对一个超几何分布进行采样,size表示采样次数,ngood表示总体中具有成功标志的元素个数,nbad表示总体中不具有成功标志的元素个数,nggd+nbad表示总体样本容量,nsample表示抽取元素次数(小于或等于总体样本容量),函数的返回值表示抽取nsample个元素具有成功标识元素个数。
举例代码

(1)一共20只动物中有7只是狗,抽取12只有三只狗的概率(无放回抽样)

import numpy as np
import matplotlib.pyplot as plt
from scipy import stats

#动物抽取案例
np.random.seed(20201124)
size=50000
x=np.random.hypergeometric(ngood=7,nbad=13,nsample=12,size=size)
'''或者
#用rvs(M,n,N,loc=0,size=1,random_state=None)模拟
x=stats.hypergeom.rvs(M=20,n=7,N=12,size=size)
'''
print(np.sum(x==3)/size)

plt.rcParams['font.sans-serif']=['SimHei']
plt.hist(x,bins=8)
plt.xlabel('狗的数量')
plt.ylabel('50000个样本中出现次数')
plt.title('超几何分布',fontsize=20)
plt.show()

'''
M为总体容量
n为总体中具有成功标志的元素个数
N,k表示抽取N个元素中有k个成功元素
'''
x=range(8)
#用hypergeom.pmf(k,M,n,Nloc)来计算k次成功概率
s=stats.hypergeom.pmf(k=x,M=20,n=7,N=12)
print(np.around(s,3))

抽取

  • 根据图片我们可以看到模拟中各种情况的分布,以及抽取到三只狗的概率为0.19956。

连续性随机变量

2.1均匀分布

  • numpy.random.uniform(low=0.0,high=1.0,size=None)
    
  • low:左边界,默认为0,包含
  • high:右边界,默认为1.0,不包含
  • size:产生样本个数
     样品均匀分布在半开区间[low,high)(包括低,但排除高)。换句话说,给定区间内的任何值都同样可能被均匀绘制。
示例代码

(1)在low到high范围内,创建大小为size的均匀分布的随机数。

import numpy as np
import matplotlib.pyplot as plt
from scipy import stats

#创建size大小的均匀分布随机数
np.random.seed(20201124)
a=0
b=100
size=50000
x=np.random.uniform(a,b,size=size)
print(np.all(x>=0))
print(np.all(x<100))
y=(np.sum(x<50)-np.sum(x<10))/size
print(y)

plt.rcParams['font.sans-serif']=['SimHei']
plt.hist(x,bins=20)
plt.show()

a=stats.uniform.cdf(10,0,100)
b=stats.uniform.cdf(50,0,100)
print(b-a)#0.4

均匀分布
 作为uniform()的特例,rand()也可以得到[0,1)之间的均匀分布随机数。

  •  numpy.random.rand(d0,d1,...,dn)
    

创建一个给定形状的数组,并在[0,1)上使用来自均匀分布的随机样本填充它。
 作为uniform()的特例,rand()也可以得到[0,1)之间的均匀分布随机数。

  •  numpy.random.randint(low,high=None,size=None,dtype='1')
    
  • low:下限界,包含无默认值
  • high:上限界,不包含,默认值空
  • size:大小,无默认值

若 high 不为 None 时,取[low,high)之间随机整数,否则取值[0,low)之间随机整数。

示例代码
#另外一个特例,randint取得[low,high)之间均匀分布随机整数,若没指定high,则为[0,low)之间
x=np.random.randint(1,size=10)
print(x)
x=np.random.randint(5,size=(2,4))
print(x)
x=np.random.randint(1,10,[3,4])
print(x)

结果

  • 这三条纪录就是三个输出结果

2.2 正态分布

标准正态分布表示:
正态分布

  • numpy.random.randn(d0,d1,...,dn)
    
  • 函数返回一个标准正态分布的样本
示例代码

(1)根据指定大小产生满足标准正态分布的数组(均值为0,标准差为1)。

import numpy as np
import matplotlib.pyplot as plt
from scipy import stats

#根据指定大小产生满足标准正态分布的数组
np.random.seed(20201124)
size=50000
x=np.random.randn(size)
y1=(np.sum(x<1)-np.sum(x<-1))/size
y2=(np.sum(x<2)-np.sum(x<-2))/size
y3=(np.sum(x<3)-np.sum(x<-3))/size
print(y1)
print(y2)
print(y3)

plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
plt.hist(x,bins=20)
plt.show()

y1=stats.norm.cdf(1)-stats.norm.cdf(-1)
y2=stats.norm.cdf(2)-stats.norm.cdf(-2)
y3=stats.norm.cdf(3)-stats.norm.cdf(-3)
print(y1)
print(y2)
print(y3)


#指定分布和参数来进行随机,例如高斯分布中的mu和sigma
x=0.5*np.random.randn(2,4)+5
'''或者
#模拟10000个随机变量
x=0.5*stats.norm.rvs(size=(2,4))+5
'''
print(x)

np.random.seed(20201124)
mu=5#平均值
sigma=0.5#标准差
x=np.random.normal(mu,sigma,(2,4))
print(x)

size=50000
x=np.random.normal(mu,sigma,size)
print(np.mean(x))
print(np.std(x,ddof=1))
'''
ddof:int,optional
Means Delta Degrees of Freedom.The divisor used in calcuiations is N-ddof,
where Nrepresents the number of elements.By default ddof is zero.
'''
plt.hist(x,bins=20)
plt.show()

在这里插入图片描述
 还可以指定分布以及所需要的参数来进行随机,例如高斯分布中的mu和sigma。

  •  numpy.random,norm(loc=0.0,scale=1.0,size=None)
    
  • loc:指定正态分布的均值,默认为0.0

  • scale:指定正态分布的标准差,默认为1.0

  • size:指定样本个数
    normal()市创建均值loc(mu),标准差(sigma),大小为size的数组。

     sigma*np.random.randn(...)+mu
    
示例代码
#指定分布和参数来进行随机,例如高斯分布中的mu和sigma
x=0.5*np.random.randn(2,4)+5
'''或者
#模拟10000个随机变量
x=0.5*stats.norm.rvs(size=(2,4))+5
'''
print(x)

np.random.seed(20201124)
mu=5#平均值
sigma=0.5#标准差
x=np.random.normal(mu,sigma,(2,4))
print(x)

size=50000
x=np.random.normal(mu,sigma,size)
print(np.mean(x))
print(np.std(x,ddof=1))
'''
ddof:int,optional
Means Delta Degrees of Freedom.The divisor used in calcuiations is N-ddof,
where Nrepresents the number of elements.By default ddof is zero.
'''
plt.hist(x,bins=20)
plt.show()

定义

正态分布

2.3 指数分布

 指数分布描述时间发生的时间长度间隔
指数分布数学表示:
指数分布定义

  •  numpy.random.exponential(scale=1.0,size=None)
    
  • scale:λ的值,默认为1.0
  • size:生成样本个数
示例代码
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats

np.random.seed(20201124)
lam=7
size=50000
x=np.random.exponential(1/lam,size)
'''或者
#rvs(loc=0,scale=1/lam,size=size,random_state=None)模拟
'''

y1=(np.sum(x<1/7))/size
y2=(np.sum(x<2/7))/size
y3=(np.sum(x<3/7))/size
print(y1)
print(y2)
print(y3)

plt.rcParams['font.sans-serif']=['SimHei']
plt.hist(x,bins=20)
plt.show()

y1=stats.expon.cdf(1/7,scale=1/lam)
y2=stats.expon.cdf(2/7,scale=2/lam)
y3=stats.expon.cdf(3/7,scale=3/lam)
print(y1)
print(y2)
print(y3)

指数分布

  • 利用指数分布函数生成样本数量生成的直方图

其他随机函数

3.1 随机从序列中获取元素

  •  numpy.random.choice(a,size=None,replace=True,p=None)
    
  • 该函数是从给定的一维数组中获取一个新的随机样本
  • a:给定的一维数组
  • size:随机获取元素个数
  • replace:接收boolean型,表示生成的随机数组元素是否重复,默认True。
  • p:接收数组,指定数组各个元素获取概率
示例代码
#从随机序列中获取元素
import numpy as np
print('从随机序列获取元素')
np.random.seed(20201124)
#从0~9获取3个元素
x=np.random.choice(10,3)
print(x)

#指定元素概率
x=np.random.choice(10,3,p=[0.05,0,0.05,0.9,0,0,0,0,0,0])
print(x)

#指定生成元素不重复以及各个元素获取概率
x=np.random.choice(10,3,replace=False,p=[0.05,0,0.05,0.9,0,0,0,0,0,0])
print(x)

aa_milne_arr=['pooh','rabbit','piglet','Christopher']
x=np.random.choice(aa_milne_arr,5,p=[0.5,0.1,0.1,0.3])
print(x)

np.random.seed(20201124)
x=np.random.randint(0,10,3)
print(x)

结果

3.2 对数据集进行洗牌操作

 数据一般都是按照采集顺序排列的,但是在机器学习中很多算法都要求数据之间相互独立,所以要先对数据集进行洗牌操作。

  •   numpy.random.shuffle(x)
    
  • x进行重新排序,如果x为多维数组,只沿轴0洗牌,改变原来数组,输出为None
示例代码
print('对数据集洗牌操作')
x=np.arange(10)
np.random.shuffle(x)
print(x)

print(np.random.shuffle([1,4,9,12,15]))

x=np.arange(20).reshape((5,4))
print(x)
np.random.shuffle(x)
print(x)

洗牌一
 除了shuffle()函数之外,还有permutation()函数也可以实现洗牌操作,两者的区别是后者洗牌操作不会打乱原数组,输出结果为打乱后的数组。函数格式:

  •  numpy.random.permutation(x)
    
示例代码
print('第二种洗牌')
x=np.arange(10)
y=np.random.permutation(x)
print(y)

print(np.random.permutation([1,4,9,12,15]))
x=np.arange(20).reshape((5,4))
print(x)
y=np.random.permutation(x)
print(y)

洗牌二


统计相关

次序统计

4.1 计算最小值
  •  numpy.amin(a[,axis=None,out=None,keepdims=np._NoValue,initial=np._NoValue,where=np._NoValue])
    
  • 函数返回指定维度最小值
  • a:接收数组对象,表示需要查找最小值的对象
  • axis:可选参数,指定查找轴,默认是全局查找,0表示按列查找,1表示按行查找。
  • out:ndarray,可选。将结果放置在其中的替代输出数组。必须具有与预期输出相同的形状和缓冲区长度。
  • keepdims:接收boolean,可选。如果将其设置为True,则将缩小的轴作为尺寸为1的尺寸留在结果中。使用此选项,结果将在输入数组中正确广播。
示例代码
import numpy as np

#计算最小值
print('计算最小值')
x=np.arange(11,36).reshape(5,5)
y=np.amin(x)
print('最小值:',y)

y=np.amin(x,axis=0)
print('轴0上最小值:',y)

y=np.amin(x,axis=1)
print('轴1上最小值:',y)

最小值

4.2 计算最大值

numpy.amax(a[,axis=None,out=None,keepdims=np._NoValue,initial=np._NoValue,where=np._NoValue])

  • 函数返回指定维度最大值
  • a:接收数组对象,表示需要查找最小值的对象
  • axis:可选参数,指定查找轴,默认是全局查找,0表示按列查找,1表示按行查找。
  • out:ndarray,可选。将结果放置在其中的替代输出数组。必须具有与预期输出相同的形状和缓冲区长度。
  • keepdims:接收boolean,可选。如果将其设置为True,则将缩小的轴作为尺寸为1的尺寸留在结果中。使用此选项,结果将在输入数组中正确广播。
示例代码
#计算最大值
print('计算最大值')
y=np.amax(x)
print('最大值:',y)

y=np.amax(x,axis=0)
print('轴0最大值:',y)

y=np.amax(x,axis=1)
print('轴1最大值:',y)

最大值

4.3 计算极差

numpy.ptp(a,axis=None,out=None,keepdims=np._NoValue)

  • 函数返回指定维度极差
  • a:接收数组对象,表示需要查找最小值的对象
  • axis:可选参数,指定查找轴,默认是全局查找,0表示按列查找,1表示按行查找。
  • out:ndarray,可选。将结果放置在其中的替代输出数组。必须具有与预期输出相同的形状和缓冲区长度。
  • keepdims:接收boolean,可选。如果将其设置为True,则将缩小的轴作为尺寸为1的尺寸留在结果中。使用此选项,结果将在输入数组中正确广播。
示例代码
#计算极差
print('计算极差')
np.random.seed(20201124)
x=np.random.randint(0,20,size=[4,5])
print('数组为:',x)
print('x极差为:',np.ptp(x))
print('x在轴0上极差为:',np.ptp(x,axis=0))
print('x在轴1上极差为:',np.ptp(x,axis=1))

极差

4.4计算分位数

  •  numpy.percentile(a,q,axis=None,out=None,overwrite_input=False,interpolation='linear',keepdims=False)
    
  • a:array,用来算分位数对象,可以是多维数组。
  • q:介于0-100的float,用来计算是几分位的参数,如四分之一位就是25,如要算两个位置的数就[25,75]。
  • axis:坐标轴的方向,一维的就不用考虑了,多维的就用这个调整计算的维度方向,取值范围0表示列,1表示行。
示例代码
#计算分位数
print('计算分位数')
np.random.seed(20201124)
x=np.random.randint(0,20,size=[4,5])
print('x数组为:',x)
print('计算20和50分位数:',np.percentile(x,[25,50]))
print('计算轴0上25和50分位数:',np.percentile(x,[25,50],axis=0))
print('计算轴1上25和5分位数:',np.percentile(x,[25,50],axis=1))

分位数


均值与方差

5.1 计算中位数

  •  numpy.median(a,axis=None,out=None,overwrite_input=False,keepdims=False)
    
  • 函数返回数组对象指定轴的中位数
  • a:array,需要计算中位数的数组
  • axis:指定计算中位数的轴方向,空表示全部,0表示沿列计算,1表示沿行计算。
  • out:array,默认空。将结果放置在其中的替代输出数组。它具有与预期输出相同的形状和缓冲区长度,但如果有必要,类型(输出)将被转换。
  • overwrite_input:boolean参数,可选。输入数组将通过对“中位数”的调用进行修改。当您不需要保存输入数组的内容时,这将节省内存。将输入视为未定义的,但可能会完全或部分排序。
  • keepdims:接收boolean,可选。如果将其设置为True,则将缩小的轴作为尺寸为1的尺寸留在结果中。使用此选项,结果将在输入数组中正确广播。
示例代码
#计算中位数
print('计算中位数')
np.random.seed(20201124)
x=np.random.randint(0,20,size=[4,5])
print('数组x:',x)

print('x上的中位数(percentile):',np.percentile(x,50))
print('x上的中位数(median):',np.median(x))
print('轴0上的中位数(percentile):',np.percentile(x,50,axis=0))
print('轴0上的中位数(median):',np.median(x,axis=0))
print('轴1上的中位数(percentile):',np.percentile(x,50,axis=1))
print('轴1上的中位数(median):',np.median(x,axis=1))

中位数

5.2 计算平均值

  •  numpy.mean(a[,axis=None,dtype=None,out=None,keepdims=np._NoValue])
    
  • 函数返回数组对象指定轴方向的平均值
  • a:array,需要计算平均值的数组对象
  • axis:可选参数,默认为全局平均值,0指定为列,1指定为行。
  • dtype:可选参数,指定数组数据类型。
  • keepdims:接收boolean,可选。如果将其设置为True,则将缩小的轴作为尺寸为1的尺寸留在结果中。使用此选项,结果将在输入数组中正确广播。
示例代码
#计算平均值
print('计算平均值')
x=np.arange(11,36).reshape(5,5)
y=np.mean(x)
print('数组x平均值为:',y)
y=np.mean(x,axis=0)
print('数组x沿轴0平均值为:',y)
y=np.mean(x,axis=1)
print('数组x沿轴1平均值为:',y)

平均值

5.3 计算加权平均值

  •  numpy.average(a[,axis=None,weights=None,returned=False])
    
  • 计算指定数组对象的加权平均值。
  • a:array,计算加权平均值的数组对象。
  • axis:可选参数,默认是整个数组,0表示沿列计算,1表示沿行计算。
  • weights:array,可选。指定权重大小。不指定表示计算平均值
  • returned:boolean,可选。若为True除了返回加权平均值外还会返回权重数组对象。
示例代码

(1)计算加权平均值(将各数值乘以相应的权数,然后加总求和得到总体值,再除以总的单位数。)

#计算加权平均值
print('计算加权平均值')
y=np.average(x)
print('权值相等是x的平均值:',y)
y=np.average(x,axis=0)
print('沿轴0的x平均值',y)
y=np.average(x,axis=1)
print('沿轴1的x平均值',y)

y=np.arange(1,26).reshape([5,5])
print('权值y:',y)

z=np.average(x,weights=y)
print('加权平均值为:',z)

z=np.average(x,axis=1,weights=y)
print('沿轴1加权平均值:',z)

加权平均值

5.4 计算方差

  •  numpy.var(a[,axis=None,dtype=None,out=None,ddof=0,keepdims=np._NoValue])
    
  • 函数用来计算一个数组指定轴的方差
  • a:array,用于计算方差的数组对象。
  • axis:可选参数,默认表示整个数组对象,0表示按列计算,1表示按行计算。
  • dtype:可选参数,表示用于计算方差时指定的数据类型。
  • ddof:可选参数,默认为0,表示自由度个数。
  • keepdims:接收boolean,可选。如果将其设置为True,则将缩小的轴作为尺寸为1的尺寸留在结果中。使用此选项,结果将在输入数组中正确广播。
    要注意方差和样本方差的无偏估计,方差公式中分母是n;样本无偏估计公式中分母是n-1(n为样本个数)

证明链接

示例代码

(1)计算方差

#计算方差
print('计算方差')
y=np.var(x)
print('数组x的方差:',y)
y=np.mean((x-np.mean(x))**2)
print('使用定义计算方差:',y)

y=np.var(x,ddof=1)
print('标准差无偏估计为 1的样本方差:',y)
y=np.sum((x-np.mean(x))**2)/(x.size-1)
print('样本方差:',y)

y=np.var(x,axis=0)
print('x在轴0上的方差:',y)
y=np.var(x,axis=1)
print('x在轴1上的方差:',y)

计算方差

5.5 计算标准差

 标准差是一组数据平均值分散程度的一种度量,是方差的算术平方根。

numpy.std(a[,axis=None,dtype=None,out=None,ddof=0,keepdims=np._NoValue])
  • 函数用来计算一个数组指定轴的标准差
  • a:array,用于计算标准差的数组对象。
  • axis:可选参数,默认表示整个数组对象,0表示按列计算,1表示按行计算。
  • dtype:可选参数,表示用于计算方差时指定的数据类型。
  • ddof:可选参数,默认为0,表示自由度个数。
  • keepdims:接收boolean,可选。如果将其设置为True,则将缩小的轴作为尺寸为1的尺寸留在结果中。使用此选项,结果将在输入数组中正确广播。
示例代码

(1)计算标准差

#计算标准差
print('计算标准差')
y=np.std(x)
print('x数组的标准差为:',y)
y=np.sqrt(np.var(x))
print('x的标准差:',y)

y=np.std(x,axis=0)
print('x数组在轴0上的标准差为:',y)
y=np.std(x,axis=1)
print('x数组在轴1上的标准差为:',y)

标准差


相关

6.1 计算协方差矩阵

  • numpy.cov(m,y=None,rowvar=True,bias=False,ddof=None,fweights=None,aweights=None)
    
  • 函数用于计算一个给定数据以及权重系数的协方差矩阵。
  • m:array,用于计算协方差的矩阵对象
  • y:可选,若为空,则计算m的协方差矩阵,否则计算m和y的协方差矩阵。
  • rowvar:boolean,可选。若为True,表示每一行代表一个变量,沿着列进行计算;否则,相反。
  • ddof:可选参数,表示自由度个数。
  • bias:boolean,可选。默认归一化(False)是‘(N-1)’,其中N‘是给出的观察数(无偏估计)。如果“偏见”是真实的,那么标准化就是“N”。可以通过在numpy版本中使用关键字‘ddof’>=1.5来覆盖这些值。
  • fweights:可选参数,整数频率权值的一维数组;重复每一个向量的次数。
  • aweights:一维阵列观测向量权重。对于被认为“重要”的观测,这些相对权重基本上很大,对于被认为“不那么重要”的观测,这些相对权重较小。如果‘ddof=0’,则权重数组可用于向观测向量分配概率。
    ####示例代码
import numpy as np

#计算协方差矩阵
print('计算协方差矩阵')
x=[1,2,3,4,6]
y=[0,2,5,6,7]
print('x的样本方差cov',np.cov(x))
print('y的样本方差cov',np.cov(y))
print('x与y的协方差:',np.cov(x,y))

print('x的方差:',np.var(x))
print('x的样本方差ddof=1',np.var(x,ddof=1))
print('y的方差:',np.var(y))
print('y的样本方差ddof:',np.var(y,ddof=1))

z=np.mean((x-np.mean(x))*(y-np.mean(y)))
print('x与y的协方差(公式法):',z)

z=np.sum((x-np.mean(x))*(y-np.mean(y)))/(len(x)-1)
print('样本的协方差:',z)

z=np.dot(x-np.mean(x),y-np.mean(y))/(len(x)-1)
print('样本协方差:',z)

协方差

6.2计算相关系数

  • numpy.corrcoef(x,y=None,rowvar=True,bias=np._NoValue,ddof=np._NoValue)
    
  • 函数返回皮尔森相关系数矩阵
  • x:array,用于计算相关系数的矩阵对象
  • y:可选,若为空,则计算x的相关系数矩阵,否则计算x和y的相关系数矩阵。
  • rowvar:boolean,可选。若为True,表示每一行代表一个变量,沿着列进行计算;否则,相反。
  • ddof:可选参数,表示自由度个数。
  • bias:boolean,可选。默认归一化(False)是‘(N-1)’,其中N‘是给出的观察数(无偏估计)。如果“偏见”是真实的,那么标准化就是“N”。可以通过在numpy版本中使用关键字‘ddof’>=1.5来覆盖这些值。
    np.cov()描述的是两个向量协同变化的程度,它的取值可能非常大,也可能非常小,这就导致没法直观的衡量两者协同变化的程度。相关系数实际上是正则化的协方差,n个变量的相关系数形成一个n维方阵。
示例代码

(1)计算相关系数

#计算相关系数
print('计算相关系数')
np.random.seed(20201124)
x,y=np.random.randint(0,20,size=(2,4))

print('x:',x)
print('y:',y)

z=np.corrcoef(x,y)
print('x和y的相关系数:',z)

a=np.dot(x-np.mean(x),y-np.mean(y))
b=np.sqrt(np.dot(x-np.mean(x),x-np.mean(x)))
c=np.sqrt(np.dot(y-np.mean(y),y-np.mean(y)))
print('x和y的相关系数:',a/(b*c))

相关系数

6.3 直方图

  • numpy.digitize(x,bins,rights=False)
    
  • 返回每个值输入数组所属的回收箱的索引。
  • x:numpy数组。
  • bins:一维单调数组,必须是升序或者降序
  • rights:间隔是否包含最右
  • 返回值:x在bins中的位置
示例代码
#直方图
print('直方图')
x=np.array([0.2,6.4,3.0,1.6])
bins=np.array([0.0,1.0,2.5,4.0,10.0])
inds=np.digitize(x,bins)
print(inds)
for n in range(x.size):
    print(bins[inds[n]-1],"<=",x[n],"<",bins[inds[n]])
x=np.array([1.2,10.0,12.4,15.5,20.])
bins=np.array([0,5,10,15,20])
inds=np.digitize(x,bins,right=True)
print(inds)

inds=np.digitize(x,bins,right=False)
print(inds)

直方图

总结

 随机抽样是很重要的一项内容,不算太难,但是内容偏多。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值