您的位置:首页 > 其它

概率论:均值、方差与协方差矩阵

2015-09-28 19:58 2536 查看
http://blog.csdn.net/pipisorry/article/details/48788671

要理解协方差矩阵,从以下几个步骤来说 期望 ——> 方差——>协方差——>协方差矩阵,这样更能理解它的由来和意义。

本文主要讲意义和python里的使用,其实协方差矩阵有很强的实际意义和应用实例,有机会再补充。

均值、方差和标准差

给定一个含有n个样本的集合,可以得到样本的均值,方差和标准差。

均值公式:

方差公式:

方差:



方差的算术平方根称为该随机变量的标准差。反应组内个体的离散程度,用数学符号σ表示。
标准差:



为什么方差和标准差这里除以的是n-1 而不是 n?

[http://www.zhihu.com/question/20099757]
这个讨论下有很多答案,综合来看就很完善了。其实在现在的大数据情况下,这一区别也就很小了。

期望

参见wiki中的数学定义如下:



期望的性质







条件期望



[条件数学期望]

皮皮blog

方差

一个随机变量的方差描述的是它的离散程度,也就是该变量离其期望值的距离。



方差的性质



方差体现的向量性质





皮皮blog

协方差

方差和标准差反应的是一维数据的分布情况,那么如果要处理二维甚至更高维度的数据时该怎么办呢?
协方差表示的是两个随机变量的关系,首先我们看下它的定义:



联系前面的方差也就很好理解了,方差其实就是协方差的特殊形式

那么协方差是如何表示两个随机变量的关系的呢?
简单来说就是如果两个随机变量的协方差>0,则两者是正相关的,结果为负值就说明负相关的。如果为0,说明两者是不相关的,这里特别说明下,如果两个随机变量是相互独立的那么协方差
cov(X, Y) = cov( Y, X) = E(X, Y ) - uv = E(X) E(Y) - uv = uv- uv = 0
但是如果cov(X, Y) = 0 并不能说明X, Y相互独立,只能说明两者不相关,这里牵扯到相关系数,不详细说了。

[协方差的意义]

协方差矩阵

协方差计算的是两个随机变量间的关系,那么如果有n个随机变量呢,两两计算cov需要计算次,因此用矩阵来表示这个计算就得到协方差矩阵了。
定义:



Note: 根据定义,上面的协方差矩阵计算的是行向量X1, X2...(其中Xi代表的的随机变量,不是观测值)之间的协方差。随机变量举个例子就是坐标系中不同维度(坐标)(x1, x2, ..., xn)而不是坐标点(xi, yi, zi),这点要格外注意。

[协方差矩阵 -sherryllll]

协方差使用示例

设有一个三维的数据集{ X, Y, Z},则协方差矩阵如下:



下面用代码验证下结果,并说下python中的协方差矩阵的函数使用。
4个坐标点,共3个维度(变量),每个维度4个值,下面这段代码中E是通过上面的公式来计算协方差矩阵的,然后调用np.cov(X, bias=1)和np.cov(X)函数进行对比:

import numpy as np

X = np.array([[0, 0, 0], [1, 0, 1], [1, 0, 0], [1, 1, 0]]).T
print('X = \n%s\n' % X)

X_mean = np.mean(X, 1)
E = np.zeros([len(X), len(X)])
for i in range(len(X)):
for j in range(i, len(X)):
E[j, i] = E[i, j] = (X[i] - X_mean[i]).dot(X[j] - X_mean[j]) / len(X[i])
print('E = \n%s\n' % E)

print("np.cov(X, bias=1) = \n%s\n" % np.cov(X, bias=1))
print("np.cov(X) = \n%s\n" % np.cov(X))


结果如下:
X =
[[0 1 1 1]
[0 0 0 1]
[0 1 0 0]]

E =
[[ 0.1875 0.0625 0.0625]
[ 0.0625 0.1875 -0.0625]
[ 0.0625 -0.0625 0.1875]]

np.cov(X, bias=1) =
[[ 0.1875 0.0625 0.0625]
[ 0.0625 0.1875 -0.0625]
[ 0.0625 -0.0625 0.1875]]

np.cov(X) =
[[ 0.25 0.08333333 0.08333333]
[ 0.08333333 0.25 -0.08333333]
[ 0.08333333 -0.08333333 0.25 ]]

因此,python中cov默认(也就是bias=0)的计算公式应该如下:



且不同维度的表示用的是行向量,就是X中元素是行向量,代表某个维度。
Note:

1. numpy中的方差计算是除以N,而协方差计算是除以N-1,所以会发现单独计算向量的方差并不会与计算两个向量的协方差矩阵对角线上的元素相等![numpy教程 - 统计函数]

2. 注意这里的(X[i] - X_mean[i]).dot(X[j] - X_mean[j]) / len(X[i]),其中(X[i] - X_mean[i]).dot(X[j] - X_mean[j]) 是向量相乘,相当于使用了和公式∑,之后再除以len(X[i])

from:http://blog.csdn.net/pipisorry/article/details/48788671ref:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: