方差
定義
方差是在概率論和統(tǒng)計(jì)方差衡量隨機(jī)變量或一組數(shù)據(jù)時(shí)離散程度的度量。
概率論中方差用來度量隨機(jī)變量和其數(shù)學(xué)期望(即均值)之間的偏離程度。
統(tǒng)計(jì)中的方差(樣本方差)是每個(gè)樣本值與全體樣本值的平均數(shù)之差的平方值的平均數(shù)。
在許多實(shí)際問題中,研究方差即偏離程度有著重要意義。

使用numpy計(jì)算
>>> a=np.random.randint(10,size=10)
>>> a
array([3, 6, 2, 8, 9, 7, 5, 6, 9, 8])
>>> np.var(a) #樣本總方差
5.21
>>> np.var(a, ddof = 1) # 計(jì)算樣本方差
5.788888888888889
>>> b=np.random.randint(10,size=10)
>>> b
array([9, 8, 4, 2, 3, 2, 0, 8, 1, 4])
>>> c=(a,b)
>>> c
(array([3, 6, 2, 8, 9, 7, 5, 6, 9, 8]), array([9, 8, 4, 2, 3, 2, 0, 8, 1, 4]))
>>> np.var(c) # 計(jì)算所有元素方差
8.36
>>> np.var(c, axis = 0) # 計(jì)算每一列的方差
array([ 9. , 1. , 1. , 9. , 9. , 6.25, 6.25, 1. , 16. ,
4. ])
>>> np.var(c, axis = 1) # 計(jì)算每一行的方差
array([5.21, 9.09])
使用pandas計(jì)算
pandas 中的 var 函數(shù)可以得到樣本方差(不是總體方差)
>>> import pandas as pd
>>> df = pd.DataFrame(np.array([[85, 76, 90], [82, 90, 88], [84, 88, 78]]), columns=['a', 'b', 'b'], index=['x', 'y', 'z'])
>>> df
a b b
x 85 76 90
y 82 90 88
z 84 88 78
>>> df.var() # 顯示每一列的方差
a 2.333333
b 57.333333
b 41.333333
dtype: float64
>>> df.var(axis = 1) # 顯示每一行的方差
x 50.333333
y 17.333333
z 25.333333
dtype: float64
協(xié)方差COV
定義
協(xié)方差(Covariance)在概率論和統(tǒng)計(jì)學(xué)中用于衡量?jī)蓚€(gè)變量的總體誤差。而方差是協(xié)方差的一種特殊情況,即當(dāng)兩個(gè)變量是相同的情況。
協(xié)方差表示的是兩個(gè)變量的總體的誤差,這與只表示一個(gè)變量誤差的方差不同。 如果兩個(gè)變量的變化趨勢(shì)一致,也就是說如果其中一個(gè)大于自身的期望值,另外一個(gè)也大于自身的期望值,那么兩個(gè)變量之間的協(xié)方差就是正值。 如果兩個(gè)變量的變化趨勢(shì)相反,即其中一個(gè)大于自身的期望值,另外一個(gè)卻小于自身的期望值,那么兩個(gè)變量之間的協(xié)方差就是負(fù)值。

協(xié)方差自然是由方差衍生而來的,方差反應(yīng)的是一個(gè)變量(一維)的離散程度,到二維了,我們可以對(duì)每個(gè)維度求其離散程度,但我們還想知道更多。我們想知道兩個(gè)維度(變量)之間的關(guān)系,直觀的舉例就是身高和體重(青少年),我們采集到的數(shù)據(jù)里面有一種固有的性質(zhì),那就是身高越高的樣本似乎總有著更大的體重,那我們?nèi)绾魏饬窟@種關(guān)系呢,單獨(dú)求兩個(gè)方差是不行的。因此協(xié)方差應(yīng)運(yùn)而生,它的公式也與方差極度同源,方差是每個(gè)樣本減去均值的平方后去平均(n-1),協(xié)方差就把平方的2拆成1+1,就是x減去x的平均,乘以,y減去y的平均,最后對(duì)整體取平均。
協(xié)方差的效果是:協(xié)方差的值如果為正值,則說明兩者是正相關(guān)的 (數(shù)值越大,相關(guān)性越強(qiáng)),結(jié)果為負(fù)值就說明負(fù)相關(guān)的,如果為0,也是就是統(tǒng)計(jì)上說的“相互獨(dú)立”。
使用numpy
>>> X = np.array([171, 184, 210, 198, 166, 167])
>>> Y = np.array([78, 77, 98, 110, 80, 69])
>>> np.cov(X,Y)
array([[328.66666667, 228.73333333],
[228.73333333, 237.46666667]])
#輸出一個(gè)2*2的協(xié)方差矩陣
# 328.66666667是X與X的協(xié)方差
# 228.73333333是X和Y的協(xié)方差
# 237.46666667是Y和Y的協(xié)方差
使用panda
>>> X = np.array([171, 184, 210, 198, 166, 167])
>>> Y = np.array([78, 77, 98, 110, 80, 69])
>>> x1=pd.DataFrame(X)
>>> y1=pd.DataFrame(Y)
>>> x1[0].cov(x1[0])
328.6666666666667
>>> x1[0].cov(y1[0])
228.73333333333332
>>> y1[0].cov(y1[0])
237.46666666666667
相關(guān)系數(shù)
定義
相關(guān)系數(shù)是最早由統(tǒng)計(jì)學(xué)家卡爾·皮爾遜設(shè)計(jì)的統(tǒng)計(jì)指標(biāo),是研究變量之間線性相關(guān)程度的量,一般用字母 r 表示。由于研究對(duì)象的不同,相關(guān)系數(shù)有多種定義方式,較為常用的是皮爾遜相關(guān)系數(shù)。

使用numpy
>>> X = np.array([171, 184, 210, 198, 166, 167])
>>> Y = np.array([78, 77, 98, 110, 80, 69])
# 得到相關(guān)性矩陣
>>> np.corrcoef(X,Y)
array([[1. , 0.81874809],
[0.81874809, 1. ]])
使用pandas
>>> x1=pd.DataFrame(X)
>>> y1=pd.DataFrame(Y)
>>> z=pd.concat([x1,y1],axis=1)
>>> z
0 0
0 171 78
1 184 77
2 210 98
3 198 110
4 166 80
5 167 69
# 得到相關(guān)性矩陣
>>> z.corr()
0 0
0 1.000000 0.818748
0 0.818748 1.000000