Chinaunix首页 | 论坛 | 博客
  • 博客访问: 962412
  • 博文数量: 33
  • 博客积分: 803
  • 博客等级: 军士长
  • 技术积分: 1755
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-05 18:58
个人简介

《Python科学计算》的作者

文章分类

全部博文(33)

文章存档

2016年(1)

2014年(2)

2013年(3)

2012年(27)

分类: Python/Ruby

2012-02-29 20:30:31

方差的计算公式

我们用下面的公式计算总体样本的方差:

.sigma^2 = .frac 1N .sum_{i=1}^N  .left(x_i - .mu .right)^2

其中N为样本的总数,.mu为总体样本的平均值。

但是有时候总体样本数量太大,我们只能选取其中的一部分样本y,用它对总体样本的方差进行估算。这时我们仍然可以使用上面的公式:

s_n^2 = .frac{1}{n} .sum_{i=1}^n.left(y_i - .overline{y} .right)^ 2

但是使用此公式计算出的方差会偏小,它被称为偏样本方差(biased sample variance),而下面公式计算的方差既不偏大也不偏小,称为无偏样本方差(unbiased sample variance)。

s^2 = .frac{1}{n-1} .sum_{i=1}^n.left(y_i - .overline{y} .right)^ 2

s^2被称为无偏样本方差,因此它的期望等于.sigma^2

验证无偏样本方差

下面让我们用程序验证一下上面的公式。

import numpy as np

np.random.seed(1)
data = np.random.normal(0, 1.0, size=(10000, 10))
print np.var(data)
var1 = np.var(data, axis=1)            
var2 = np.var(data, axis=1, ddof=1)    
print np.mean(var1)
print np.mean(var2)

创建一个二维数组,这个数组表示总体样本。而我们已经将它分成了10000组,每组都是一组部分样本,计算每组样本的方差,缺省情况下计算的是偏样本方差,而如果设置ddof参数为1,则计算无偏样本方差。输出这两种方差的平均值。程序的输出如下:

从程序的运行结果可以看出,无偏样本方差的平均值十分接近总体样本的方差。下面的链接页面详细解释了偏样本方差偏小的原因以及无偏样本方差公式的推导过程。

无偏样本方差为什么除以n-1?

方差的最大似然估计

偏样本方差的公式所计算的方差是正态分布随机变量的最大似然估计。首先我们有n个样本,并且知道这n个样本符合正态分布,通过这些样本可以估算出正态分布的概率密度函数的参数。所估算的那组正态分布参数最符合给定的样本,就成为最大似然估计。

正态分布的概率密度函数的定义如下:

f(x.mid .mu,.sigma^2) = .frac{1}{.sqrt{2.pi.sigma^2}} e^{-.frac{(x-.mu)^2}{2.sigma^2}}

其中.mu.sigma^2是函数的两个参数,分别表示期望和方差。

所谓最大似然估计就是找到一组参数使得下面的乘积最大,其中x_i为样本值:

f(x_1) f(x_2) .cdots f(x_n)

专业术语总是很难理解,下面我们还是用程序来验证。

import numpy as np
import pylab as pl

def normal_pdf(mean, var, x):
        return 1/np.sqrt(2*np.pi*var) * np.exp(-(x-mean)**2/(2*var))

data = np.random.normal(0, 1.0, size=10)
mean, var = np.mean(data), np.var(data)

var_range = np.linspace(var-1, var+1, 100)
p = normal_pdf(mean, var_range[:, None], data)
p = np.product(p, axis=1)
pl.plot(var_range, p)
pl.axvline(var, 0, 1)
pl.show()

产生10个正态分布的随机数,并计算其最大似然估计的参数。以最大似然估计的方差为中心,产生一组方差值。用正态分布的概率密度函数计算每个样本、每个方差所对应概率密度。p是一个二维数组,它的第0轴为反差,第1轴为样本。沿着第1轴求所有样本的概率密度的乘积。在最大似然估计的方差处绘制一条直线。程序的输出如下图所示:

图中,横轴为方差,纵轴为方差所对应的概率密度函数在各个样本处的值的乘积。可以看出按照偏样本方差公式计算的方差所对应的乘积最大。

上面的程序中,.mu采用样本的均值,为了验证样本的均值也为最大似然估计,可以让.mu.sigma^2在一个网格上取值,绘制一个三维曲面。

/最大似然估计

最大似然估计的原理以及公式推导


阅读(6409) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~