本篇为《深度学习》系列博客的第七篇,该系列博客主要记录深度学习相关知识的学习过程和自己的理解,方便以后查阅。
这是PCA知识铺垫的最后一篇博客了,加油吧,慢慢来,比较快。
均值、方差、标准差
均值:
x
ˉ
=
∑
i
=
1
n
x
i
n
(1)
\bar{x}=\frac{∑^n_{i=1}x_i}{n} \tag{1}
xˉ=n∑i=1nxi(1)
方差:
S
2
=
∑
i
=
1
n
(
x
i
−
x
ˉ
)
2
n
−
1
(2)
S^2=\frac{∑^n_{i=1}(x_i-\bar{x})^2}{n-1} \tag{2}
S2=n−1∑i=1n(xi−xˉ)2(2)
标准差:
S
=
∑
i
=
1
n
(
x
i
−
x
ˉ
)
2
n
−
1
(3)
S=\sqrt{\frac{∑^n_{i=1}(x_i-\bar{x})^2}{n-1} } \tag{3}
S=n−1∑i=1n(xi−xˉ)2(3)
均值
描述的是样本集合的中间点
,它告诉我们的信息是很有限的,标准差
给我们描述的则是样本集合的各个样本点到均值的距离之平均
。
以这两个集合为例,[0,8,12,20]和[8,9,11,12],两个集合的均值都是10,但显然两个集合差别是很大的,计算两者的标准差,前者是8.3,后者是1.8,显然后者较为集中
,故其标准差小一些,标准差描述的就是这种“散布度
”。
之所以除以n-1
而不是除以n,是因为这样能使我们以较小的样本集更好的逼近总体的标准差,即统计上所谓的“无偏估计”。
而方差则仅仅是标准差的平方。
协方差
为什么需要协方差
上面几个统计量看似已经描述的差不多了,但我们应该注意到,标准差和方差一般是用来描述一维
数据的,但现实生活我们常常遇到含有多维
数据的数据集。
最简单的大家上学时免不了要统计多个学科的考试成绩
,面对这样的数据集,我们当然可以按照每一维独立的计算其方差。
但是通常我们还想了解更多,比如,一个男孩子的猥琐程度跟他受女孩子欢迎程度是否存在一些联系
啊,嘿嘿~协方差就是这样一种用来度量两个随机变量关系的统计量
。
我们可以仿照方差的定义:
v
a
r
(
X
)
=
∑
i
=
1
n
(
x
i
−
x
ˉ
)
(
x
i
−
x
ˉ
)
n
−
1
(4)
var(X)=\frac{∑^n_{i=1}(x_i-\bar{x})(x_i-\bar{x})}{n-1} \tag{4}
var(X)=n−1∑i=1n(xi−xˉ)(xi−xˉ)(4)
来度量各个维度偏离其均值的程度,协方差可以这么来定义:
c
o
v
(
X
,
Y
)
=
∑
i
=
1
n
(
x
i
−
x
ˉ
)
(
y
i
−
y
ˉ
)
n
−
1
(5)
cov(X,Y)=\frac{∑^n_{i=1}(x_i-\bar{x})(y_i-\bar{y})}{n-1} \tag{5}
cov(X,Y)=n−1∑i=1n(xi−xˉ)(yi−yˉ)(5)
根据方差的定义公式(我的博客《有偏估计 and 无偏估计》的第三部分),我们得知(5)式是统计学公式,我们可以定义概率学公式:
c
o
v
(
X
,
Y
)
=
E
[
(
X
−
E
[
X
]
)
(
Y
−
E
(
Y
)
)
]
(5)
cov(X,Y)=E[(X-E[X])(Y-E(Y))] \tag{5}
cov(X,Y)=E[(X−E[X])(Y−E(Y))](5)
从协方差的定义上我们也可以看出一些显而易见的性质,如:
c
o
v
(
X
,
X
)
=
v
a
r
(
X
)
c
o
v
(
X
,
Y
)
=
v
a
r
(
Y
,
X
)
(5)
cov(X,X)=var(X) \\ cov(X,Y)=var(Y,X) \tag{5}
cov(X,X)=var(X)cov(X,Y)=var(Y,X)(5)
协方差的通俗理解
协方差的结果有什么意义呢?
接上一小节的
例子
:如果结果为正值
,则说明两者是正相关
的(从协方差可以引出“相关系数”的定义),也就是说一个人越猥琐就越受女孩子欢迎,结果为负值
就说明负相关
的,越猥琐女孩子越讨厌,如果为0,也是就是统计上说的“相互独立
”。
我们也可以通俗的理解为:两个变量在变化过程中是
同方向
变化?还是反方向
变化?同向或反向程度
如何?你变大,同时我也变大,说明两个变量是同向变化的,这时协方差就是正的。
你变大,同时我变小,说明两个变量是反向变化的,这时协方差就是负的。
从数值来看,协方差的
数值越大
,两个变量同向程度
也就越大。反之亦然。
咱们从公式出发来理解一下:
c
o
v
(
X
,
Y
)
=
E
[
(
X
−
E
[
X
]
)
(
Y
−
E
(
Y
)
)
]
(6)
cov(X,Y)=E[(X-E[X])(Y-E(Y))] \tag{6}
cov(X,Y)=E[(X−E[X])(Y−E(Y))](6)
公式简单翻译一下是:如果有X,Y两个变量,每个时刻
的“X值与其均值之差”乘以“Y值与其均值之差”得到一个乘积,再对这每时刻的乘积求和并求出均值(其实是求“期望
”,但就不引申太多新概念了,简单认为就是求均值了)。
下面举个例子
来说明吧:
比如有两个变量X,Y,观察t1-t7(7个时刻)他们的变化情况。
简单做了个图:分别用红点和绿点表示X、Y,横轴是时间。可以看到X,Y均围绕各自的均值运动,并且很明显是同向变化
的。
这时,我们发现每一时刻
X
−
μ
x
X-\mu_x
X−μx的值与
X
−
μ
y
X-\mu_y
X−μy的值的“正负号”一定相同(如下图:比如t1时刻,他们同为正,t2时刻他们同为负):
所以,像上图那样,当他们同向变化时,
X
−
μ
x
X-\mu_x
X−μx与
X
−
μ
y
X-\mu_y
X−μy的乘积为正。这样,当你把t1-t7时刻
X
−
μ
x
X-\mu_x
X−μx与
X
−
μ
y
X-\mu_y
X−μy的乘积加在一起,求平均后也就是正数了。
如果反向运动
呢?
很明显,
X
−
μ
x
X-\mu_x
X−μx的值与
X
−
μ
y
X-\mu_y
X−μy的值的“正负号”一定相反,于是
X
−
μ
x
X-\mu_x
X−μx与
X
−
μ
y
X-\mu_y
X−μy的乘积就是负值了。这样当你把t1-t7时刻
X
−
μ
x
X-\mu_x
X−μx与
X
−
μ
y
X-\mu_y
X−μy的乘积加在一起,求平均的时候也就是负数了。
当然上面说的是两种特殊情况,很多时候X,Y的运动是不规律
的,比如:
这时,很可能某一时刻
X
−
μ
x
X-\mu_x
X−μx的值与
X
−
μ
y
X-\mu_y
X−μy的值乘积为正,另外一个时刻
X
−
μ
x
X-\mu_x
X−μx的值与
X
−
μ
y
X-\mu_y
X−μy的值乘积为负。
将每一时刻 X − μ x X-\mu_x X−μx与 X − μ y X-\mu_y X−μy的乘积加在一起,其中的正负项就会抵消掉,最后求平均得出的值就是协方差,通过协方差的数值大小,就可以判断这两个变量同向或反向的程度了。
所以,t1-t7时刻中, X − μ x X-\mu_x X−μx与 X − μ y X-\mu_y X−μy的乘积为正的越多,说明同向变化的次数越多,也即同向程度越高。反之亦然。
总结一下,如果协方差为正,说明X,Y同向变化,协方差越大说明同向程度越高;如果协方差为负,说明X,Y反向运动,协方差越小说明反向程度越高。
相关系数
对于相关系数,我们从它的公式入手。一般情况下,相关系数的公式为:
ρ
=
c
o
v
(
X
,
Y
)
σ
x
σ
y
(7)
ρ=\frac{cov(X,Y)}{σ_xσ_y} \tag{7}
ρ=σxσycov(X,Y)(7)
翻译一下:就是用X、Y的协方差
除以X的标准差
和Y的标准差。
所以,相关系数也可以看成协方差:一种剔除了两个变量量纲
影响、标准化
后的特殊协方差。
既然是一种特殊的协方差,那它:
- 可以反映两个变量变化时是同向还是反向,如果同向变化就为正,反向变化就为负。
- 由于它是标准化后的协方差,因此更重要的
特性
来了:它消除了两个变量变化幅度的影响,而只是单纯反应两个变量每单位变化时的相似程度
。
比较抽象,下面还是举个例子来说明:
首先,还是承接上文中的变量X、Y变化的示意图(X为红点,Y为绿点),来看两种情况:
很容易就可以看出以上两种情况X,Y都是同向变化的,而这个“同向变化”,有个非常显著特征:X、Y同向变化的过程,具有极高的相似度
!无论第一还是第二种情况下,都是:t1时刻X、Y都大于均值,t2时刻X、Y都变小且小于均值,t3时刻X、Y继续变小且小于均值,t4时刻X、Y变大但仍小于均值,t5时刻X、Y变大且大于均值……
可是,计算一下他们的协方差:
- 第一种情况下:
[ ( 100 − 0 ) × ( 70 − 0 ) + ( − 100 − 0 ) × ( − 70 − 0 ) + ( − 200 − 0 ) × ( − 200 − 0 ) … ] / 7 ≈ 15428.57 (8) [(100-0)×(70-0)+(-100-0)×(-70-0)+(-200-0)×(-200-0)…]/7≈15428.57 \tag{8} [(100−0)×(70−0)+(−100−0)×(−70−0)+(−200−0)×(−200−0)…]/7≈15428.57(8) - 第二种情况下:
[ ( 0.01 − 0 ) × ( 70 − 0 ) + ( − 0.01 − 0 ) × ( − 70 − 0 ) + ( − 0.02 − 0 ) × ( − 200 − 0 ) … ] / 7 ≈ 1.542857 (9) [(0.01-0)×(70-0)+(-0.01-0)×(-70-0)+(-0.02-0)×(-200-0)…]/7≈1.542857 \tag{9} [(0.01−0)×(70−0)+(−0.01−0)×(−70−0)+(−0.02−0)×(−200−0)…]/7≈1.542857(9)
协方差差出了一万倍,只能从两个协方差都是正数判断出两种情况下X、Y都是同向变化,但是,一点也看不出两种情况下X、Y的变化都具有相似性
这一特点。
这是为什么呢?
因为以上两种情况下,在X、Y两个变量同向变化时,X变化的幅度不同,这样,两种情况的协方差更多的被变量的变化幅度
所影响了。
所以,为了能准确的研究两个变量在变化过程中的相似程度,我们就要把变化幅度对协方差的影响,从协方差中剔除掉。于是,相关系数
就横空出世了,就有了最开始相关系数的公式:
ρ
=
c
o
v
(
X
,
Y
)
σ
x
σ
y
(10)
ρ=\frac{cov(X,Y)}{σ_xσ_y} \tag{10}
ρ=σxσycov(X,Y)(10)
那么为什么要通过除以标准差的方式来剔除变化幅度的影响呢?咱们简单从标准差公式看一下:
σ
x
=
E
[
(
X
−
μ
x
)
2
]
(11)
σ_x=\sqrt{E[(X-\mu_x)^2]} \tag{11}
σx=E[(X−μx)2](11)
从公式可以看出,标准差计算方法为,每一时刻变量值与变量均值之差
再平方,求得一个数值,再将每一时刻这个数值相加后求平均,再开方。
“变量值与变量均值之差”
X
−
μ
x
X-\mu_x
X−μx是什么呢?就是偏离均值的幅度
:
那为何要对它做平方
呢?因为有时候变量值与均值是反向偏离的(见下图),
X
−
μ
x
X-\mu_x
X−μx是个负数
,平方后,就可以把负号消除
了。这样在后面求平均时,每一项数值才不会被正负抵消掉,最后求出的平均值才能更好的体现出每次变化偏离均值
的情况。
当然,最后求出平均值后并没有结束,因为刚才为了消除负号,把
X
−
μ
x
X-\mu_x
X−μx进行了平方,那最后肯定要把求出的均值开方
,将这个偏离均值的幅度还原回原来的量级
。于是就有了下面标准差的公式:
σ
x
=
E
[
(
X
−
μ
x
)
2
]
(12)
σ_x=\sqrt{E[(X-\mu_x)^2]} \tag{12}
σx=E[(X−μx)2](12)
所以标准差描述了变量在整体变化过程中偏离均值的幅度
。协方差除以标准差,也就是把协方差中变量变化幅度对协方差的影响剔除掉,这样协方差也就标准化
了,它反应的就是两个变量每单位变化时的情况。这也就是相关系数的公式含义了。
同时,你可以反过来想象一下:既然相关系数是协方差除以标准差,那么,当X或Y的波动幅度变大的时候,它们的协方差会变大,标准差也会变大,这样相关系数的分子分母都变大,其实变大的趋势会被抵消掉,变小时也亦然。于是,很明显的,相关系数不像协方差一样可以在 + ∞ +∞ +∞到 - ∞ -∞ -∞间变化,它只能在 + 1 +1 +1到 - 1 -1 -1之间变化(相关系数的取值范围在+1到-1之间变化可以通过施瓦茨不等式来证明,有些复杂,这里就不赘述了,有兴趣的可以google下)。
总结一下,对于两个变量X、Y:
当他们的相关系数为1时
,说明两个变量变化时的正向相似度最大,即,你变大一倍,我也变大一倍;你变小一倍,我也变小一倍。也即是完全正相关(以X、Y为横纵坐标轴,可以画出一条斜率为正数的直线,所以X、Y是线性关系的)。
随着他们相关系数减小,两个变量变化时的相似度也变小,当相关系数为0时
,两个变量的变化过程没有任何相似度,也即两个变量无关。
当相关系数继续变小,小于0时
,两个变量开始出现反向的相似度,随着相关系数继续变小,反向相似度会逐渐变大。
当相关系数为-1时
,说明两个变量变化的反向相似度最大,即,你变大一倍,我变小一倍;你变小一倍,我变大一倍。也即是完全负相关(以X、Y为横纵坐标轴,可以画出一条斜率为负数的直线,所以X、Y也是线性关系的)。
有了上面的背景,我们再回到最初的变量X、Y的例子中,可以先看一下
-
第一种情况的相关系数
X的标准差为
σ x = E [ ( X − μ x ) 2 ] ≈ 130.9307 (13) σ_x=\sqrt{E[(X-\mu_x)^2]} ≈130.9307 \tag{13} σx=E[(X−μx)2]≈130.9307(13)
Y的标准差为
σ y = E [ ( X − μ y ) 2 ] ≈ 130.9307 (14) σ_y=\sqrt{E[(X-\mu_y)^2]} ≈130.9307 \tag{14} σy=E[(X−μy)2]≈130.9307(14)
于是相关系数为
ρ = 15428.57 / ( 130.9307 × 119.2836 ) ≈ 0.9879 (15) ρ=15428.57/(130.9307×119.2836)≈0.9879 \tag{15} ρ=15428.57/(130.9307×119.2836)≈0.9879(15)
说明第一种情况下,X的变化与Y的变化具有很高的相似度,而且已经接近完全正相关了,X、Y几乎就是线性变化的。 -
第二种情况
X的标准差为
σ x = E [ ( X − μ x ) 2 ] ≈ 0.01309307 (16) σ_x=\sqrt{E[(X-\mu_x)^2]} ≈0.01309307 \tag{16} σx=E[(X−μx)2]≈0.01309307(16)
Y的标准差为
σ y = E [ ( X − μ y ) 2 ] ≈ 130.9307 (17) σ_y=\sqrt{E[(X-\mu_y)^2]} ≈130.9307 \tag{17} σy=E[(X−μy)2]≈130.9307(17)
于是相关系数为
ρ = 1.542857 / ( 0.01309307 × 119.2836 ) ≈ 0.9879 (18) ρ=1.542857/(0.01309307×119.2836)≈0.9879 \tag{18} ρ=1.542857/(0.01309307×119.2836)≈0.9879(18)
说明第二种情况下,虽然X的变化幅度比第一种情况X的变化幅度小了10000倍,但是丝毫没有改变“X的变化与Y的变化具有很高的相似度
”这一结论。同时,由于第一种、第二种情况的相关系数是相等
的,因此在这两种情况下,X、Y的变化过程有着同样的相似度
。
协方差矩阵
概念理解
协方差多了就是协方差矩阵
上一节提到的猥琐和受欢迎的问题是典型二维问题,而协方差也只能处理二维问题,那维数多了自然就需要计算多个协方差,比如n维的数据集就需要计算
n
!
/
(
(
n
−
2
)
!
∗
2
)
n! / ((n-2)!*2)
n!/((n−2)!∗2) 个协方差,那自然而然的我们会想到使用矩阵来组织这些数据。给出协方差矩阵的定义:
C
m
×
n
=
(
c
i
j
,
c
i
j
=
c
o
v
(
D
i
m
i
,
D
i
m
j
)
)
(19)
C_{m×n}=(c_{ij},c_{ij}=cov(D_{im_i,D_{im_j}})) \tag{19}
Cm×n=(cij,cij=cov(Dimi,Dimj))(19)
这个定义还是很容易理解的,我们可以举一个简单的三维的例子,假设数据集有三个维度,则协方差矩阵为
C
=
[
c
o
v
(
x
,
x
)
c
o
v
(
x
,
y
)
c
o
v
(
x
,
z
)
c
o
v
(
y
,
x
)
c
o
v
(
y
,
y
)
c
o
v
(
y
,
z
)
c
o
v
(
z
,
x
)
c
o
v
(
z
,
y
)
c
o
v
(
z
,
z
)
]
(20)
C= \begin{bmatrix} cov(x,x) & cov(x,y) & cov(x,z) \\ cov(y,x) & cov(y,y) & cov(y,z) \\ cov(z,x) & cov(z,y) & cov(z,z) \end{bmatrix} \tag{20}
C=⎣⎡cov(x,x)cov(y,x)cov(z,x)cov(x,y)cov(y,y)cov(z,y)cov(x,z)cov(y,z)cov(z,z)⎦⎤(20)
可见,协方差矩阵是一个对称的矩阵,而且对角线是各个维度上的方差。
Matlab协方差实战
上面涉及的内容都比较容易,协方差矩阵似乎也很简单,但实战起来就很容易让人迷茫了。必须要明确一点,协方差矩阵计算的是不同维度之间的协方差,而不是不同样本之间的
。这个我将结合下面的例子说明,以下的演示将使用Matlab,为了说明计算原理,不直接调用Matlab的cov函数(蓝色部分为Matlab代码)。
首先,随机产生一个10*3维的整数矩阵作为样本集,10为样本的个数,3为样本的维数。
>> mysample = fix(rand(10,3)*50)
mysample =
40 7 32
45 48 1
6 47 42
45 24 46
31 40 33
4 7 37
13 21 37
27 45 19
47 39 32
48 47 8
根据公式,计算协方差需要计算均值,那是按行计算均值还是按列呢,我一开始就老是困扰这个问题。前面我们也特别强调了,协方差矩阵是计算不同维度间的协方差,要时刻牢记这一点。样本矩阵的每行是一个样本,每列为一个维度,所以我们要按列计算均值。为了描述方便,我们先将三个维度的数据分别赋值:
>> dim1 = mysample(:,1);
>> dim2 = mysample(:,2);
>> dim3 = mysample(:,3);
计算dim1与dim2,dim1与dim3,dim2与dim3的协方差:
>> sum((dim1 - mean(dim1)) .* (dim2 - mean(dim2))) / (size(mysample, 1) - 1)
ans =
78
>> sum((dim1 - mean(dim1)) .* (dim3 - mean(dim3))) / (size(mysample, 1) - 1)
ans =
-120.2444
>> sum((dim2 - mean(dim2)) .* (dim3 - mean(dim3))) / (size(mysample, 1) - 1)
ans =
-126.9444
搞清楚了这个后面就容易多了,协方差矩阵的对角线就是各个维度上的方差,下面我们依次计算:
>> var(dim1)
ans =
301.1556
>> var(dim2)
ans =
268.9444
>> var(dim3)
ans =
216.0111
这样,我们就得到了计算协方差矩阵所需要的所有数据,调用Matlab自带的cov函数进行验证:
>> cov(mysample)
ans =
301.1556 78.0000 -120.2444
78.0000 268.9444 -126.9444
-120.2444 -126.9444 216.0111
协方差矩阵的另一种计算方式:
- 先让样本矩阵中心化,即每一维度减去该维度的均值,使每一维度上的均值为0
- 然后直接用新的到的样本矩阵乘上它的转置,然后除以(N-1)即可
>> temp = mysample - repmat(mean(mysample), 10, 1)
temp =
9.4000 -25.5000 3.3000
14.4000 15.5000 -27.7000
-24.6000 14.5000 13.3000
14.4000 -8.5000 17.3000
0.4000 7.5000 4.3000
-26.6000 -25.5000 8.3000
-17.6000 -11.5000 8.3000
-3.6000 12.5000 -9.7000
16.4000 6.5000 3.3000
17.4000 14.5000 -20.7000
>> result = temp' * temp ./ (size(mysample, 1) - 1)
result =
301.1556 78.0000 -120.2444
78.0000 268.9444 -126.9444
-120.2444 -126.9444 216.0111
理解协方差矩阵的关键就在于牢记它计算的是不同维度之间的协方差
,而不是不同样本之间,拿到一个样本矩阵,我们最先要明确的就是一行是一个样本还是一个维度,心中明确这个整个计算过程就会顺流而下,这么一来就不会迷茫了~
散度矩阵
在机器学习模式识别中,经常需要应用到协方差矩阵C和散布矩阵S。如在PCA主成分分析中,需要计算样本的散度矩阵,有的论文是计算协方差矩阵。实质上二者意义差不多,散布矩阵(散度矩阵)前乘以系数1/(n-1)就可以得到协方差矩阵了。
在模式识别的教程中,散布矩阵也称为散度矩阵,有的也称为类内离散度矩阵或者类内离差阵,用一个等式关系可表示为:
关系:散度矩阵=类内离散度矩阵=类内离差阵=协方差矩阵×(n-1)
样本的协方差矩阵(式5)乘以n-1倍即为散布矩阵,n表示样本的个数,散布矩阵的大小由特征维数d决定,是一个为d×d 的半正定矩阵。
ok,结束了!!!
参考博客:
https://www.zhihu.com/question/20852004
https://blog.csdn.net/xiao_lxl/article/details/72730000
https://blog.csdn.net/guyuealian/article/details/68922981