概率统计Python计算:用样本均值和方差计算总体参数的点估计

在这里插入图片描述
设来自总体 X X X的简单样本为 ( X 1 , X 2 , ⋯   , X n ) (X_1, X_2,\cdots,X_n) (X1,X2,,Xn)。样本均值为 X ‾ = 1 n ∑ i = 1 n X i \overline{X}=\frac{1}{n}\sum\limits_{i=1}^nX_i X=n1i=1nXi,样本方差为 S 2 = 1 n − 1 ∑ i = 1 n ( X i − X ‾ ) 2 S^2=\frac{1}{n-1}\sum\limits_{i=1}^n(X_i-\overline{X})^2 S2=n11i=1n(XiX)2。用Python的numpy包提供的array对象表示样本观测值 ( x 1 , x 2 , ⋯   , x n ) (x_1,x_2,\cdots,x_n) (x1,x2,,xn),则运用array对象的mean方法可算得样本均值的观测值 x ‾ = 1 n ∑ i = 1 n x i \overline{x}=\frac{1}{n}\sum\limits_{i=1}^nx_i x=n1i=1nxi,这是一个无参函数。用array对象的var方法可算得样本方差的观测值 s 2 = 1 n − 1 ∑ i = 1 n ( x i − x ‾ ) 2 s^2=\frac{1}{n-1}\sum\limits_{i=1}^n(x_i-\overline{x})^2 s2=n11i=1n(xix)2,其调用接口为
var(ddof=0) \text{var(ddof=0)} var(ddof=0)
参数ddof确定算得的结果为 1 n − ddof ∑ i = 1 n ( x i − x ‾ ) 2 \frac{1}{n-\text{ddof}}\sum\limits_{i=1}^n(x_i-\overline{x})^2 nddof1i=1n(xix)2,缺省值为0,即计算样本2阶原点矩 1 n ∑ i = 1 n ( x i − x ‾ ) 2 \frac{1}{n}\sum\limits_{i=1}^n(x_i-\overline{x})^2 n1i=1n(xix)2。即传递1给ddof,则var算得 s 2 s^2 s2
利用array的std方法则可计算 ( x 1 , x 2 , ⋯   , x n ) (x_1,x_2,\cdots,x_n) (x1,x2,,xn)的标准差,其调用接口为
std(ddof=0) \text{std(ddof=0)} std(ddof=0)
参数ddof的意义与var的同名参数相同。即传递1给ddof,std算得 s = s 2 s=\sqrt{s^2} s=s2
例1 设总体 X X X的样本观测值为1502,1453,1367,1650,求样本均值,样本方差和样本均方差。
:样本均值为 x ‾ = 1 4 ( 1502 + 1453 + 1376 + 1650 ) = 1493. \overline{x}=\frac{1}{4}(1502+1453+1376+1650)=1493. x=41(1502+1453+1376+1650)=1493.样本方差为 s 2 = 1 3 [ ( 1502 − 1493 ) 2 + ( 1453 − 1493 ) 2 + ( 1376 − 1493 ) 2 + ( 1650 − 1493 ) 2 ] = 14068.667. s^2=\frac{1}{3}[(1502-1493)^2+(1453-1493)^2+(1376-1493)^2+(1650-1493)^2]=14068.667. s2=31[(15021493)2+(14531493)2+(13761493)2+(16501493)2]=14068.667.样本均方差为 s = s 2 = 14068.667 = 118.611. s=\sqrt{s^2}=\sqrt{14068.667}=118.611. s=s2 =14068.667 =118.611.
下列代码验算本例计算结果。

import numpy as np                      #导入numpy
x=np.array([1502, 1453, 1367, 1650])    #设置样本数据
mean=x.mean()                           #计算样本均值
s2=x.var(ddof=1)                        #计算样本方差
s=x.std(ddof=1)                         #计算样本均方差
print('x_=%.4f'%mean)
print('s^2=%.4f'%s2)
print('s=%.4f'%s)

第3行调用array对象x的mean方法,计算样本均值 x ‾ \overline{x} x,第4,5行分别调用x的var方法和std方法计算样本方差 s 2 s^2 s2和样本均方差 s s s。运行程序,输出

x_=1493.0000
s^2=14068.6667
s=118.6114

由于 X ‾ \overline{X} X S 2 S^2 S2是总体均值 μ \mu μ和总体方差 σ 2 \sigma^2 σ2的无偏估计,故可运用array对象的上述方法来计算 μ \mu μ σ 2 \sigma^2 σ2的点估计值,然后直接或间接地计算总体的未知参数估计值。
例2 设总体 X X X~ U ( a , b ) U(a, b) U(a,b) a a a b b b未知。 ( X 1 , X 2 , ⋯   , X n ) (X_1,X_2,\cdots,X_n) (X1,X2,,Xn)为来自 X X X的样本,用样本均值 X ‾ \overline{X} X和样本方差 S 2 S^2 S2计算 a a a b b b的估计量。设容量 n = 20 n=20 n=20的样本观测值为
1.248 , 1.664 , 1.101 , 1.967 , 1.468 , 1.140 , 1.434 , 1.063 , 1.878 , 1.375 1.819 , 1.704 , 1.328 , 1.619 , 1.830 , 1.764 , 1.034 , 1.553 , 1.878 , 1.166 1.248,1.664,1.101,1.967,1.468,1.140,1.434,1.063,1.878,1.375\\ 1.819,1.704,1.328,1.619,1.830,1.764,1.034,1.553,1.878,1.166 1.248,1.664,1.101,1.967,1.468,1.140,1.434,1.063,1.878,1.3751.819,1.704,1.328,1.619,1.830,1.764,1.034,1.553,1.878,1.166
计算 a a a b b b的估计值。
:我们知道 E ( X ) = a + b 2 E(X)=\frac{a+b}{2} E(X)=2a+b D ( X ) = ( b − a ) 2 12 D(X)=\frac{(b-a)^2}{12} D(X)=12(ba)2。用样本均值 X ‾ = 1 n ∑ i = 1 n X i \overline{X}=\frac{1}{n}\sum\limits_{i=1}^{n}X_i X=n1i=1nXi和样本方差 S 2 = 1 n − 1 ∑ i = 1 n ( X i − X ‾ ) 2 S^2=\frac{1}{n-1}\sum\limits_{i=1}^{n}(X_i-\overline{X})^2 S2=n11i=1n(XiX)2,分别估计 E ( X ) E(X) E(X) D ( X ) D(X) D(X)。即
{ a ∧ + b ∧ 2 = X ‾ ( b ∧ − a ∧ ) 2 12 = S 2 \begin{cases} \frac{\stackrel{\wedge}{a}+\stackrel{\wedge}{b}}{2}=\overline{X}\\\frac{(\stackrel{\wedge}{b}-\stackrel{\wedge}{a})^2}{12}=S^2 \end{cases} 2a+b=X12(ba)2=S2
解此方程组,得参数 a a a b b b的估计量
{ a ∧ = X ‾ − 3 S b ∧ = X ‾ + 3 S \begin{cases}\stackrel{\wedge}{a}=\overline{X}-\sqrt{3}S\\\stackrel{\wedge}{b}=\overline{X}+\sqrt{3}S\end{cases} {a=X3 Sb=X+3 S
其中, S = S 2 S=\sqrt{S^2} S=S2 为样本标准差。
样本均值的观测值为
x ‾ = 1 20 ( 1.248 + 1.664 + ⋯ + 1.166 ) = 1.502 \overline{x}=\frac{1}{20}(1.248+1.664+\cdots+1.166)=1.502 x=201(1.248+1.664++1.166)=1.502
样本方差的观测值为
s 2 = 1 19 [ ( 1.248 − 1.502 ) 2 + ( 1.664 − 1.501 ) + ⋯ + ( 1.166 − 1.502 ) ] = 0.094 s^2=\frac{1}{19}[(1.248-1.502)^2+(1.664-1.501)^+\cdots+(1.166-1.502)^]=0.094 s2=191[(1.2481.502)2+(1.6641.501)++(1.1661.502)]=0.094
样本均方差 s = s 2 = 0.307 s=\sqrt{s^2}=0.307 s=s2 =0.307,代入 a a a b b b估计量表达式
{ a ∧ = x ‾ − 3 s = 0.970 b ∧ = x ‾ + 3 s = 2.034 . \begin{cases}\stackrel{\wedge}{a}=\overline{x}-\sqrt{3}s=0.970\\\stackrel{\wedge}{b}=\overline{x}+\sqrt{3}s=2.034\end{cases}. {a=x3 s=0.970b=x+3 s=2.034.
下列代码验算本例计算结果。

import numpy as np                              #导入numpy
x=np.array([1.248, 1.664 ,1.101 ,1.967 ,1.468,  #设置样本数据数组
            1.140, 1.434, 1.063, 1.878, 1.375,
            1.819, 1.704, 1.328, 1.619, 1.830,
            1.764, 1.034, 1.553, 1.878, 1.166])
mu=x.mean()                                     #计算样本均值
sigma=x.std(ddof=1)                             #计算样本标准差
a=mu-np.sqrt(3)*sigma                           #计算参数a的估计值
b=mu+np.sqrt(3)*sigma                           #计算参数b的估计值
print('用样本均值、方差估计a=%.4f, b=%.4f'%(a, b))

运行程序,输出

用样本均值、方差估计a=0.9697, b=2.0336

写博不易,敬请支持:
如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!
代码诚可贵,原理价更高。若为AI学,读正版书好
返回《导引》

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 计算PyTorch标准化所需要的数据集均值方差,可以通过以下步骤进行: 1. 导入必要的库: ```python import torch import torchvision.transforms as transforms import torchvision.datasets as datasets ``` 2. 定义数据集加载的转换函数: ```python transform = transforms.Compose([ transforms.ToTensor() ]) ``` 3. 加载数据集: ```python dataset = datasets.Dataset_name(root='./data', train=True, download=True, transform=transform) dataloader = torch.utils.data.DataLoader(dataset, batch_size=batch_size, shuffle=False) ``` 4. 计算均值方差: ```python mean = 0. std = 0. total_samples = 0. for inputs, _ in dataloader: batch_samples = inputs.size(0) inputs = inputs.view(batch_samples, inputs.size(1), -1) mean += inputs.mean(2).sum(0) std += inputs.std(2).sum(0) total_samples += batch_samples mean /= total_samples std /= total_samples ``` 在该步骤中,我们遍历数据集加载器并计算每个输入的均值方差。由于我们的输入是一个四维张量,我们首先使用`view`函数重塑输入张量,使其为二维张量,并计算其在最后一个维度中的均值方差。然后我们将每个批次的值累加,并计算总样本的均值方差。 5. 打印均值方差: ```python print("均值:", mean) print("方差:", std) ``` 6. 最后,运行代码以获取数据集的标准化所需的均值方差。 这是计算PyTorch标准化所需数据集均值方差的基本方法。根据你使用的数据集类型和目的,你可能需要进行一些适应性调整。 ### 回答2: 计算PyTorch标准化所需的数据集均值方差方法如下: 首先,加载训练集的数据,例如使用torchvision库中的datasets和transforms方法来加载数据集。然后将训练集转换为Tensor类型数据。 接下来,计算数据集的均值方差。通过使用torch.mean()和torch.var()函数,分别计算Tensor数据集的均值方差。这里可以通过设置参数来指定计算的维度,例如设置dim=0,表示计算每个通道的均值方差。 最后,通过将均值方差应用于数据集,可以使用torchvision.transforms.Normalize()函数来标准化数据集。将计算得到的均值方差作为参数传递给Normalize()函数,然后将其应用于数据集。这样,数据集中的每个数据将按照指定的均值方差进行标准化处理。 示例代码如下所示: ```python import torch import torchvision import torchvision.transforms as transforms # 加载训练集数据 trainset = torchvision.datasets.CIFAR10(root='./data', train=True, download=True, transform=transforms.ToTensor()) trainloader = torch.utils.data.DataLoader(trainset, batch_size=1, shuffle=True, num_workers=2) # 计算数据集的均值方差 mean = torch.zeros(3) var = torch.zeros(3) for images, _ in trainloader: mean += torch.mean(images, dim=(0, 2, 3)) var += torch.var(images, dim=(0, 2, 3)) mean /= len(trainset) var /= len(trainset) # 打印均值方差 print('均值:', mean) print('方差:', var) ``` 通过运行上述代码,将得到计算得到的数据集均值方差

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值