使用numpy可以做很多事情,在這篇文章中簡單介紹一下如何使用numpy進行方差/標准方差/樣本標准方差/協方差的計算。
variance: 方差
方差(Variance)是概率論中最基礎的概念之一,它是由統計學天才羅納德·費雪1918年最早所提出。用於衡量數據離散程度,因為它能體現變量與其數學期望(均值)之間的偏離程度。具有相同均值的數據,而標准差可能不同,而通過標准差的大小則能更好地反映出數據的偏離度。
計算:一組數據1,2,3,4,其方差應該是多少?
計算如下:
均值=(1+2+3+4)/4=2.5
方差=((1-2.5)^2 + (2-2.5)^2 + (3-2.5)^2 +(4-2.5)^2)/4 = (2.25+0.25+0.25+2.25)/4 = 1.25
python的numpy庫中使用var函數即可求解,代碼&執行如下:
1
2
3
4
5
6
7
8
|
liumiaocn:tmp liumiao$ cat np
-
5.py
#!/usr/local/bin/python
import
numpy as np
arr
=
np.array([
1
,
2
,
3
,
4
])
print
(
"variance of [1,2,3,4]:"
, np.var(arr))
liumiaocn:tmp liumiao$ python np
-
5.py
(
'variance of [1,2,3,4]:'
,
1.25
)
liumiaocn:tmp liumiao$
|
standard deviation: 標准偏差
標准偏差=方差的開放,所以:
計算: 一組數據1,2,3,4,其標准偏差應該是多少?
計算就很簡單了,對其求出的方差1.25進行開方運算即可得到大約1.118
可以使用numpy庫中的std函數就可以非常簡單的求解,代碼&執行如下:
1
2
3
4
5
6
7
8
9
10
11
12
|
liumiaocn:tmp liumiao$ cat np
-
6.py
#!/usr/local/bin/python
import
numpy as np
arr
=
np.array([
1
,
2
,
3
,
4
])
print
(
"variance of [1,2,3,4]:"
, np.var(arr))
print
(
"sqrt of variance [1,2,3,4]:"
,np.sqrt(np.var(arr)))
print
(
"standard deviation: np.std()"
, np.std(arr))
liumiaocn:tmp liumiao$ python np
-
6.py
(
'variance of [1,2,3,4]:'
,
1.25
)
(
'sqrt of variance [1,2,3,4]:'
,
1.118033988749895
)
(
'standard deviation: np.std()'
,
1.118033988749895
)
liumiaocn:tmp liumiao$
|
sample standard deviation: 樣本標准偏差
標准偏差是對總體樣本進行求解,如果有取樣,則需要使用樣本標准偏差,它也是一個求開方的運算,但是對象不是方差,方差使用是各個數據與數學均值的差的求和的均值,簡單來說除的對象是N,樣本偏差則是N-1。
計算: 一組數據1,2,3,4,其樣本標准偏差應該是多少?
計算如下:
均值=(1+2+3+4)/4=2.5
樣本標准偏差的方差=((1-2.5)^2 + (2-2.5)^2 + (3-2.5)^2 +(4-2.5)^2)/3 = (2.25+0.25+0.25+2.25)/4 = 5/3
所以對5/3開方運算所得到的就是樣本標准偏差為:1.29
同樣適用numpy的std函數就可以做到這點,只需要將其一個Optional的參數設定為1即可,代碼&執行如下:
1
2
3
4
5
6
7
8
|
liumiaocn:tmp liumiao$ cat np
-
7.py
#!/usr/local/bin/python
import
numpy as np
arr
=
np.array([
1
,
2
,
3
,
4
])
print
(
"sample standard deviation: np.std()"
, np.std(arr, ddof
=
1
))
liumiaocn:tmp liumiao$ python np
-
7.py
(
'sample standard deviation: np.std()'
,
1.2909944487358056
)
liumiaocn:tmp liumiao$
|
注意:matlab中的std實際指的是樣本標准偏差,這點需要注意,如果你的代碼從matlab上copy過來,請注意其實際的意義是標准偏差還是樣本標准偏差