期望,方差,均值以及均方差


  

  一組數求期望(均值),不是對每個數求均值,而是第一輪是將元素以及重復次數整理出來,
  二輪才是將求元素的均值:

1 import numpy as np
2 
3 arr = np.array([1, 3, 1, 4])
4 arr = arr.reshape(2, 2)
5 print(arr)
6 print(arr.mean())
7 
8 mean = 1*(2/4) + 3*(1/4) + 4*(1/4)
9 print(mean)

 

  如上,可以看到mean的值和arr.mean是一致的。重復的元素其實只是會計算一次。概率中的講的元素也是特征元素(重復的元素只算一個特征元素);這是按照概率定義那種方式來計算(元素*概率再求和),需要首先計算出來概率;這里關鍵要區別“事件”和樣本;對於arr而言,它里面的元素就是樣本;而概率定義中公式則是事件,即不重復的元素(1,3,4)。
  另外一種算法就是直接求和取平均值:
  

 1 import numpy as np
 2 arr = np.array([1,2,3,4])
 3 sum = 0
 4 for i in arr:
 5 sum += i
 6 mean_manual = sum / len(arr)
 7 print("manual mean: ", mean_manual)
 8 print("numpy mean: ", arr.mean())
 9 
10 arr2 = arr.reshape(-1, 2)
11 print("axis=1:",arr2.mean(axis=1))
12 print("axis=0:", arr2.mean(axis=0))

 

>>> output:
manual mean: 2.5
numpy mean: 2.5
axis=1: [1.5 3.5]
axis=0: [2. 3.]

另外關於axis=0和axis=1見下面的解釋。

那么期望和均值是不是一回事呢?在有限已知的數據集內部,期望和均值在算法是一致的,但是含義不同,均值/平均值是有限集合數據(某個子集)計算值,期望真實含義是全集上面的,能夠代表集合數據的值。

方差描述的是數據的分散程度;下面是numpy計算方差以及手工計算方差:

 1 import numpy as np
 2 
 3 arr = np.array([1, 2, 3])
 4 print("mean:", arr.mean())
 5 print("arr.var: ", arr.var())
 6 
 7 sum = 0
 8 for i in arr:
 9 sum = sum + i ** 2
10 var = (sum/len(arr) - arr.mean()) ** 2
11 print("manual var: ", var)

 

>>> output:
mean: 2.0
arr.var: 0.6666666666666666
manual var: 0.666666666666667

  無論是計算方差還是計算期望,均值,對於多維數組是有三種模式:全數據計算,樣本為單位計算(橫向切割axis=1),特征為單位計算(縱向切割axis=0)。

  然后我們再來看一下方差的一個性質:
D(X+Y)=D(X) + D(Y) ;
  它的證明過程相對簡單:
D(X+Y) = E{[(X+Y) - E(X+Y)]**2} =>E{[(X - E(X)) + (Y - E(Y))]**2} =>
E(X - E(X)) **2 + E(Y - E(Y)**2 + 2E{(X-E(X))(Y-E(Y))};
  推倒到這里沒有問題,但是下面寫到:
2E{(X-E(X))(Y-E(Y))}根據期望的性質4 => 2E[X-E(X)]E[Y-E(Y)]=0
  首先期望性質4是個什么鬼?X,Y相互獨立的情況下=>E(XY) = E(X)E(Y);其次為什么是0?百思不得其解啊,后來想明白了:因為X - E(X)的期望/均值就是0!
  剛理解到這里的時候我還有一點困惑:那么方差公式原始不就是E{|X - E(X)|}嗎?豈不是總是0,但是注意,方差原始公式可以有一個絕對值運算的哦,方差公式是E{[X - E(X)]**2}也是有一個平方的運算,所以,要明白,E(X - E(X))就是0,你想E(X)本身即是X的均值,X減去自己的均值的期望,一定是0。
  最后說一下協方差,協方差公式:
Cov(X, Y) = E{[X - E(X)][Y - E(Y)]}
  如果X,Y相互獨立,那么Cov(X, Y)的值是0;和協方差有緊密關系的是相關系數,公式:
p = Cov(X, Y)/sqrt(D(X))sqrt(D(Y))
  那么追問一句:什么是獨立?看看概率里面的定義,P(B|A) = P(B),就是A發生的對於B的發生沒有影響的情況下,才叫獨立。
  p(耶律喜龍)叫做相關性,相關性越大,則說明X,和Y的線性關系越緊密,舉個例子用f(x) = 5X + 9來表示Y,那么p值越大說明f(x)可以越好的表達Y;反之亦然。p = 1說明完全可以表示,如果p = 0則說明f(x)完全不能表達Y;
  所以我們可以做如下推測:獨立 => 不相關。因為獨立Cov(X, Y) == 0,p的分子為0;所以獨立必然不相關;但是不相關卻不一定獨立,因為僅僅是X和Y沒有線性關系,並不能影響X和Y在概率上面的關系;從數學關系上面:獨立=>Cov(X, Y) == 0,但是Cov(X, Y) == 0卻推不出獨立。
  協方差的意義通常沒有相關系數大,協方差為正數,說明變化方向一致,負數則說明變化方向不一致。
  協方差在python中實現:

1 X = np.array([1,2,3,4,5])
2 Y = 5*X + 1
3 print("cov:", np.cov(X, Y))
4 print("corrcoef:", np.corrcoef(X, Y))

 

>>> output:
cov: [[ 2.5 12.5] [12.5 62.5]]
corrcoef: [[1. 1.][1. 1.]]
  "cov:"這一行,返回的是一個協方差矩陣(其實還是對角矩陣),分別代表
  [cov(X, X),cov(X,Y)]
  [cov(Y, X), cov(Y, Y)]
  所以反對角的值是一致的(12.5);
  corrcoef則是求相關性;因為f(x)可以完全表示X,所以相關性的值是1;可以看到,這里返回的也是一個相關性矩陣,四角分別代表如下的相關性:
  [p(X, X),p(X, Y)]
  [p(Y, X), p(Y, Y)]

  再比如下面的例子:

 1 arr = []
 2 arr.append([1, 1, 63])
 3 arr.append([1, 2, 75])
 4 arr.append([1, 3, 78])
 5 
 6 arr.append([2, 1, 50])
 7 arr.append([2, 2, 56])
 8 arr.append([2, 3, 65])
 9 arr.append([3, 1, 70])
10 arr.append([3, 2, 71])
11 arr.append([3, 3, 80])
12 
13 np.cov(arr, rowvar=0)

 

>>> output
array([[ 0.75 , 0. , 0.625 ],
[ 0. , 0.75 , 5. ],
[ 0.625 , 5. , 100.77777778]])

九組數據,在計算方差的時候,只要指定了rowvar值是0,則代表按照特征來進行計算協方差,於是就有了3 * 3列結果:


參考:
https://blog.csdn.net/baimafujinji/article/details/50372906


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM