文章目录
协方差
协方差定义
C
o
v
(
X
,
Y
)
=
E
(
(
X
−
E
[
x
]
)
(
Y
−
E
[
Y
]
)
)
=
E
(
(
Y
−
E
[
Y
]
)
(
X
−
E
[
X
]
)
)
Cov(X,Y)=E((X-E[x])(Y-E[Y]))=E((Y-E[Y])(X-E[X]))
Cov(X,Y)=E((X−E[x])(Y−E[Y]))=E((Y−E[Y])(X−E[X]))
说明:
1.
E
[
X
]
,
E
[
Y
]
E[X],E[Y]
E[X],E[Y]分别表示随机变量
X
,
Y
X,Y
X,Y的均值,是一个标量。
2. 从直观上来看,协方差表示的是两个变量总体误差的期望。
假设随机变量
X
,
Y
X,Y
X,Y均以列向量给出,
E
[
X
]
,
E
[
Y
]
E[X],E[Y]
E[X],E[Y]分别表示他们的均值,则以向量的方式计算他们的协方差值为:
C
o
v
(
X
,
Y
)
=
(
X
−
E
[
X
]
)
T
(
Y
−
E
[
Y
]
)
=
(
Y
−
E
[
Y
]
)
T
(
X
−
E
[
X
]
)
Cov(X,Y)=(X-E[X])^{T}(Y-E[Y])=(Y-E[Y])^{T}(X-E[X])
Cov(X,Y)=(X−E[X])T(Y−E[Y])=(Y−E[Y])T(X−E[X])
举例说明
设有随机变量
X
X
X(假设是身高),观察到的值为:
(
1
2
3
)
\begin{pmatrix}1\\ 2\\ 3\\\end{pmatrix}
⎝⎛123⎠⎞
随机变量
Y
Y
Y(假设是体重),观察到的值为:
(
2
4
9
)
\begin{pmatrix}2\\ 4\\ 9\end{pmatrix}
⎝⎛249⎠⎞
则,
E
[
X
]
=
2
E[X]=2
E[X]=2,
E
[
Y
]
=
5
E[Y]=5
E[Y]=5。
则协方差为:
C
o
v
(
X
,
Y
)
=
(
1
−
2
)
∗
(
2
−
5
)
+
(
2
−
2
)
∗
(
4
−
5
)
+
(
3
−
2
)
∗
(
9
−
5
)
=
7
Cov(X,Y)=(1-2)*(2-5)+(2-2)*(4-5)+(3-2)*(9-5)=7
Cov(X,Y)=(1−2)∗(2−5)+(2−2)∗(4−5)+(3−2)∗(9−5)=7
以向量的方式给出(表达更简洁):
C
o
v
(
X
,
Y
)
=
(
1
−
2
2
−
2
3
−
2
)
T
(
2
−
5
4
−
5
9
−
5
)
=
(
−
1
0
1
)
T
(
−
3
−
1
4
)
=
(
−
1
0
1
)
T
(
−
3
−
1
4
)
=
7
Cov(X,Y)={\begin{pmatrix}1-2\\ 2-2\\ 3-2\\\end{pmatrix}}^{T}{\begin{pmatrix}2-5\\ 4-5\\ 9-5\end{pmatrix}}={\begin{pmatrix}-1\\ 0\\ 1\\\end{pmatrix}}^{T}{\begin{pmatrix}-3\\ -1\\ 4\end{pmatrix}}={\begin{pmatrix} -1& 0 & 1\end{pmatrix}}^{T}{\begin{pmatrix}-3\\ -1\\ 4\end{pmatrix}}=7
Cov(X,Y)=⎝⎛1−22−23−2⎠⎞T⎝⎛2−54−59−5⎠⎞=⎝⎛−101⎠⎞T⎝⎛−3−14⎠⎞=(−101)T⎝⎛−3−14⎠⎞=7
虽然上述的例子很简单,但是对于理解下面的协方差矩阵构成有一定帮助。
方差
-
方差是协方差的一种特殊情况,即当两个变量是相同的情况。
D ( X ) = C o v ( X , X ) = E ( ( X − E [ X ] ) ( X − E [ X ] ) ) = E ( ( X − E [ X ] ) 2 ) D(X)=Cov(X,X)=E((X-E[X])(X-E[X]))=E((X-E[X])^2) D(X)=Cov(X,X)=E((X−E[X])(X−E[X]))=E((X−E[X])2)
说明:- 一般情况下,随机变量 X X X的方差也记作 V a r ( X ) Var(X) Var(X),简记为 D ( X ) D(X) D(X)
相关系数
- 线性相关系数,一般用字母
ρ
\rho
ρ 表示,用来度量两个变量间的
线性
关系
ρ ( X , Y ) = C o v ( X , Y ) V a r [ X ] V a r [ Y ] \rho(X,Y)=\frac{Cov(X,Y)}{\sqrt{Var[X]Var[Y]}} ρ(X,Y)=Var[X]Var[Y]Cov(X,Y)
或
ρ
(
X
,
Y
)
=
C
o
v
(
X
,
Y
)
D
(
X
)
D
(
Y
)
\rho(X,Y)=\frac{Cov(X,Y)}{\sqrt{D(X)D(Y)}}
ρ(X,Y)=D(X)D(Y)Cov(X,Y)
说明:
- 线性相关系数(皮尔逊相关系数)并不是唯一的相关系数,但是最常见的相关系数
- 皮尔逊相关系数,只是描述变量之间的线性关系,其值域为 [ − 1 , 1 ] [-1,1] [−1,1]。其值越接近越1,说明两变量正相关越强,其值越接近于-1,说明两变量越接负相关性越强。其值为0,说明两两变量之间没有线性关系,但是不能说明没有其他非线性关系。
协方差矩阵(covariance matrix)
协方差矩阵的每个元素是各个向量元素(比如,身高,体重等;以实验来说,就是多个属性之间【列向量】)之间的协方差,是从标量随机变量到高维度随机向量的自然推广。
特点:
- 矩阵中各个元素的构成:各个向量元素之间的协方差
- 对称非负定矩阵
举例说明
现有一个数据集 D D D:
属性1 | 属性2 | 属性3 | 属性4 | |
---|---|---|---|---|
样本1 | 1 | 2 | 3 | 4 |
样本2 | 3 | 4 | 1 | 2 |
样本3 | 2 | 3 | 1 | 4 |
属性(随机变量)均值 | 2 | 3 | 1.67 | 3.33 |
将数据区域写成矩阵的形式:
(
1
2
3
4
3
4
1
2
2
3
1
4
)
\begin{pmatrix} 1& 2& 3& 4\\ 3& 4& 1& 2\\ 2& 3& 1& 4\end{pmatrix}
⎝⎛132243311424⎠⎞
其中每一列就代表一个随机变量(属性,如身高),每一行代表一个样本(在各个属性上的观察值)。现在计算该数据
D
D
D的协方差矩阵。
-
每个随机变量都应该和其他随机变量(包括自身)进行协方差计算,每两个随机变量之间的协方差计算和上述的协方差计算方式相同。用 ∑ \sum ∑来表示这个协方差矩阵。
-
用 ∑ i , j \sum_{i,j} ∑i,j来表示协方差矩阵中的各个元素。则 ∑ i , j \sum_{i,j} ∑i,j表示第 i i i个随机变量(属性 i i i)和第 j j j个随机变量(属性 j j j)之间的协方差。
∑ i , j = E ( ( I − E ( I ) ) ( J − E ( J ) ) ) \sum\nolimits_{i,j}=E((I-E(I))(J-E(J))) ∑i,j=E((I−E(I))(J−E(J)))
举例:计算 ∑ 2 , 3 \sum_{2,3} ∑2,3,第二列表示的随机变量与第三列随机变量之间的协方差
∑ 2 , 3 = ( 2 − 3 4 − 3 3 − 3 ) T ( 3 − 1.67 1 − 1.67 1 − 1.67 ) = ( − 1 1 0 ) ( 1.33 − 0.67 − 0.67 ) = − 2 \sum\nolimits_{2,3}=\begin{pmatrix}2-3\\ 4-3\\ 3-3\end{pmatrix}^{T}{\begin{pmatrix}3-1.67\\ 1-1.67\\ 1-1.67\end{pmatrix}}=\begin{pmatrix}-1&1&0\end{pmatrix}{\begin{pmatrix}1.33\\ -0.67\\ -0.67\end{pmatrix}}=-2 ∑2,3=⎝⎛2−34−33−3⎠⎞T⎝⎛3−1.671−1.671−1.67⎠⎞=(−110)⎝⎛1.33−0.67−0.67⎠⎞=−2 -
每个随机变量都会与其他随机变量(包括自身)计算一遍协方差值,所有数据 D D D中有 n n n个随机变量(属性),就会有构成一个 n 行 n 列 n行n列 n行n列方阵的协方差矩阵。至于矩阵中各个元素的计算方式,按照 ∑ 2 , 3 \sum_{2,3} ∑2,3计算方式即可。
数学符号表示
设 X i , X j X_i,X_j Xi,Xj分别表示在 n n n个随机变量中的第 i i i个和第 j j j个随机变量。 E ( X i ) , E ( X j ) E(X_i),E(X_j) E(Xi),E(Xj)分别表示对应随机变量的期望。
则协方差矩阵中的第
i
,
j
i,j
i,j项元素被定义为如下形式:
∑
i
,
j
=
C
o
v
(
X
i
,
X
j
)
=
E
(
(
X
i
−
E
(
X
i
)
)
(
X
j
−
E
(
X
j
)
)
)
\sum\nolimits_{i,j}=Cov(X_i,X_j)=E((X_i-E(X_i))(X_j-E(X_j)))
∑i,j=Cov(Xi,Xj)=E((Xi−E(Xi))(Xj−E(Xj)))
所以协方差矩阵被定义为:
∑
=
(
E
(
(
X
1
−
E
(
X
1
)
)
(
X
1
−
E
(
X
1
)
)
)
E
(
(
X
1
−
E
(
X
1
)
)
(
X
2
−
E
(
X
2
)
)
)
⋯
E
(
(
X
1
−
E
(
X
1
)
)
(
X
n
−
E
(
X
n
)
)
E
(
(
X
2
−
E
(
X
2
)
)
(
X
1
−
E
(
X
1
)
)
)
E
(
(
X
2
−
E
(
X
2
)
)
(
X
2
−
E
(
X
2
)
)
)
⋯
E
(
(
X
2
−
E
(
X
2
)
)
(
X
n
−
E
(
X
n
)
)
⋮
⋮
⋮
E
(
(
X
n
−
E
(
X
n
)
)
(
X
1
−
E
(
X
1
)
)
)
E
(
(
X
n
−
E
(
X
n
)
)
(
X
2
−
E
(
X
2
)
)
)
⋯
E
(
(
X
n
−
E
(
X
n
)
)
(
X
n
−
E
(
X
n
)
)
)
\sum=\begin{pmatrix}E((X_1-E(X_1))(X_1-E(X_1)))&E((X_1-E(X_1))(X_2-E(X_2)))&\cdots E((X_1-E(X_1))(X_n-E(X_n))\\E((X_2-E(X_2))(X_1-E(X_1)))&E((X_2-E(X_2))(X_2-E(X_2)))&\cdots E((X_2-E(X_2))(X_n-E(X_n))\\\vdots&\vdots&\vdots\\E((X_n-E(X_n))(X_1-E(X_1)))&E((X_n-E(X_n))(X_2-E(X_2)))&\cdots E((X_n-E(X_n))(X_n-E(X_n))\end{pmatrix}
∑=⎝⎜⎜⎜⎛E((X1−E(X1))(X1−E(X1)))E((X2−E(X2))(X1−E(X1)))⋮E((Xn−E(Xn))(X1−E(X1)))E((X1−E(X1))(X2−E(X2)))E((X2−E(X2))(X2−E(X2)))⋮E((Xn−E(Xn))(X2−E(X2)))⋯E((X1−E(X1))(Xn−E(Xn))⋯E((X2−E(X2))(Xn−E(Xn))⋮⋯E((Xn−E(Xn))(Xn−E(Xn))⎠⎟⎟⎟⎞
说明:
- 协方差矩阵 ∑ ( n ∗ n ) \sum_{(n*n)} ∑(n∗n)是个方阵,其中 n n n的大小等于数据集 D D D中属性的个数。
协方差矩阵的应用
马氏距离
- 马氏距离(Mahalanobis Distance)是由马哈拉诺比斯(P. C. Mahalanobis)提出的,表示数据的协方差距离。它是一种有效的计算两个未知样本集的相似度的方法。与欧氏距离不同的是:它考虑到各种特性之间的联系。
数学符号定义
-
单个数据点 x x x的马氏距离:
D M ( x ) = ( x − μ ) T ∑ − 1 ( x − μ ) D_M(x)=\sqrt{(x-\mu)^{T}{\sum}^{-1}(x-\mu)} DM(x)=(x−μ)T∑−1(x−μ)
说明:-
∑ − 1 \sum^{-1} ∑−1表示协方差矩阵的逆。
-
数据点 x x x为列向量,该向量的长度和原始数据集 D D D中的属性个数相同(假设,身高,体重等随机变量)。向量中的某个值为对应随机变量的观察值。
-
μ \mu μ为各个属性上的均值。
-
马氏距离计算的是距离,是一个标量。协方差矩阵只是计算马氏距离的一个步骤。
-
-
数据点 x , y x,y x,y之间的马氏距离:
D M ( x , y ) = ( x − y ) T ∑ − 1 ( x − y ) D_M(x,y)=\sqrt{(x-y)^{T}{\sum}^{-1}(x-y)} DM(x,y)=(x−y)T∑−1(x−y)
说明:-
∑ − 1 \sum^{-1} ∑−1表示协方差矩阵的逆。
-
数据点 x , y x,y x,y均是列向量,向量的长度和原始数据集 D D D中的属性个数相同。向量中的某个值为对应随机变量的观察值。
-
-
如果如果协方差矩阵是单位向量,也就是各维度独立同分布,马氏距离就变成了欧氏距离。
优点:
- 马氏距离同欧氏距离、曼哈顿距离、汉明距离等一样被用作评定数据之间的相似度指标。但却可以应对高维线性分布的数据中各维度间非独立同分布的问题。
- 它是一种有效的计算两个未知样本集的相似度的方法。与欧氏距离不同的是它考虑到各种特性之间的联系(例如:一条关于身高的信息会带来一条关于体重的信息,因为两者是有关联的)并且是尺度无关的(scale-invariant),即独立于测量尺度
PCA降维
-
协方差矩阵在PCA中的信息度量起到作用。
https://blog.csdn.net/HLBoy_happy/article/details/77146012
使用sklearn中的np.cov遇到的坑
https://blog.csdn.net/anthea_luo/article/details/94590170
np.cov的api说明:https://docs.scipy.org/doc/numpy/reference/generated/numpy.cov.html
问题产生的原因:
-
按照rowvar的默认值(true), 会把一行当成一个特征,一列当成一个样本。但是通常我们会将一行当做一个样本,一列当做是特征。
-
解决办法:
-
将rowvar设为为flase
np.cov(a, rowvar=False)
-
或者将数据集 D D D进行转置
np.cov(a.T)
-
-
-
参数中的 b i a s bias bias参数,代表是否为有偏,默认是Fasle,即除以 N − 1 N-1 N−1。若是将 b i a s bias bias设置为 t r u e true true,则是除以 N N N。其中 N N N的大小为样本的个数。
举例说明:
参考:
- https://blog.csdn.net/u011534057/article/details/52869707
- https://blog.csdn.net/hustqb/article/details/90290232
- https://ph0en1xgseek.github.io/2018/04/18/Mahalanobis/n1xgseek.github.io/2018/04/18/Mahalanobis/