日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【Numpy学习记录】np.cov详解

發布時間:2024/1/23 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Numpy学习记录】np.cov详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

寫在篇前

??在概率論和統計學中,協方差用于衡量兩個變量的總體誤差。而方差是協方差的一種特殊情況,即當兩個變量是相同的情況。其定義的數學形式是:Cov(X,Y)=E[(X?E(X))(Y?E(Y))]=E[XY]?E[X]E[Y]Cov(X,Y)=E[(X-E(X))(Y-E(Y))] =E[XY]-E[X]E[Y]Cov(X,Y)=E[(X?E(X))(Y?E(Y))]=E[XY]?E[X]E[Y]

協方差數學形式

  • 公式

    cov(X,Y)=∑i=1n(Xi?Xˉ)(Yi?Yˉ)n?1cov(X,Y) = \frac{\sum_{i=1}^n(X_i-\bar{X})(Y_i-\bar{Y})}{n-1} cov(X,Y)=n?1i=1n?(Xi??Xˉ)(Yi??Yˉ)?

  • 結果形式

  • C=(cov(1,1)cov(1,2)cov(1,3)?cov(1,n)cov(2,1)cov(2,2)cov(2,3)?cov(2,n)cov(3,1)cov(3,2)cov(3,3)?cov(3,n)?????cov(n,1)cov(n,2)cov(n,3)?cov(n,n))C = \begin{pmatrix} \color{#F00}{cov(1,1)} & \color{#0F0}{cov(1,2)} & \color{#F0F}{cov(1,3)} & \cdots & cov(1,n) \\ \color{#0F0}{cov(2,1)} & \color{#F00}{cov(2,2)} & cov(2,3) & \cdots & cov(2,n) \\ \color{#F0F}{cov(3,1)} & cov(3,2) &\color{#F00}{cov(3,3)} & \cdots & cov(3,n) \\ \vdots & \vdots& \vdots & \ddots & \vdots \\ cov(n,1) & cov(n,2) & cov(n,3) & \cdots & \color{#F00}{cov(n,n)} \end{pmatrix} C=????????cov(1,1)cov(2,1)cov(3,1)?cov(n,1)?cov(1,2)cov(2,2)cov(3,2)?cov(n,2)?cov(1,3)cov(2,3)cov(3,3)?cov(n,3)???????cov(1,n)cov(2,n)cov(3,n)?cov(n,n)?????????

    協方差代碼形式

    函數原型:def cov(m, y=None, rowvar=True, bias=False, ddof=None, fweights=None,aweights=None)

    • m:一維或則二維的數組,默認情況下每一行代表一個變量(屬性),每一列代表一個觀測
    • y:與m具有一樣的形式的一組數據
    • rowvar:默認為True,此時每一行代表一個變量(屬性),每一列代表一個觀測;為False時,則反之
    • bias:默認為False,此時標準化時除以n-1;反之為n。其中n為觀測數
    • ddof:類型是int,當其值非None時,bias參數作用將失效。當ddof=1時,將會返回無偏估計(除以n-1),即使指定了fweights和aweights參數;當ddof=0時,則返回簡單平均值。
    • frequency weights:一維數組,代表每個觀測要重復的次數(相當于給觀測賦予權重)
    • analytic weights:一維數組,代表觀測矢量權重。對于被認為“重要”的觀察,這些相對權重通常很大,而對于被認為不太重要的觀察,這些相對權重較小。如果ddof = 0,則可以使用權重數組將概率分配給觀測向量。

    代碼示例

    基本使用

    import numpy as np# 計算協方差的時候,一行代表一個特征 # 下面計算cov(T, S, M) T = np.array([9, 15, 25, 14, 10, 18, 0, 16, 5, 19, 16, 20]) S = np.array([39, 56, 93, 61, 50, 75, 32, 85, 42, 70, 66, 80]) M = np.asarray([38, 56, 90, 63, 56, 77, 30, 80, 41, 79, 64, 88]) X = np.vstack((T, S, M)) # X每行代表一個屬性 # 每列代表一個示例,或者說觀測 print(np.cov(X))# [[ 47.71969697 122.9469697 129.59090909] # [122.9469697 370.08333333 374.59090909] # [129.59090909 374.59090909 399. ]]

    ??重點:協方差矩陣計算的是不同維度之間的協方差,而不是不同樣本之間。拿到一個樣本矩陣,首先要明確的就是行代表什么,列代表什么。

    fweights

    ??frequency weights:一維數組,代表每個觀測要重復的次數(相當于給觀測賦予權重)

    T = np.array([9, 15, 25, 14, 10, 18, 0, 16, 5, 19, 16, 20]) S = np.array([39, 56, 93, 61, 50, 75, 32, 85, 42, 70, 66, 80]) M = np.asarray([38, 56, 90, 63, 56, 77, 30, 80, 41, 79, 64, 88]) X = np.vstack((T, S, M)) print(np.cov(X, None, True, False, fweights=[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])) # 和上面例子結果一樣 # [[ 47.71969697 122.9469697 129.59090909] # [122.9469697 370.08333333 374.59090909] # [129.59090909 374.59090909 399. ]]T = np.array([9, 15, 25, 14, 10, 18, 0, 16, 5, 19, 16, 20]) S = np.array([39, 56, 93, 61, 50, 75, 32, 85, 42, 70, 66, 80]) M = np.asarray([38, 56, 90, 63, 56, 77, 30, 80, 41, 79, 64, 88]) X = np.vstack((T, S, M)) print(np.cov(X, None, True, False, fweights=[2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])) # 結果變了,就是因為相當于在X中增加了一列[9,39,38].T # [[ 45.6025641 121.55769231 128.43589744] # [121.55769231 381.42307692 389.30769231] # [128.43589744 389.30769231 415.76923077]]T = np.array([9, 9, 15, 25, 14, 10, 18, 0, 16, 5, 19, 16, 20]) S = np.array([39, 39, 56, 93, 61, 50, 75, 32, 85, 42, 70, 66, 80]) M = np.asarray([38, 38, 56, 90, 63, 56, 77, 30, 80, 41, 79, 64, 88]) X = np.vstack((T, S, M)) print(np.cov(X, None, True, False)) # 這樣就驗證了上面的話咯~ # [[ 45.6025641 121.55769231 128.43589744] # [121.55769231 381.42307692 389.30769231] # [128.43589744 389.30769231 415.76923077]]

    aweights

    ??很遺憾,暫時不知道它的計算方式,等有時間我仔細看看源碼怎么算的,再修正!

    注意事項

    參數y
    T = np.array([9, 15, 25, 14, 10, 18, 0, 16, 5, 19, 16, 20]) S = np.array([39, 56, 93, 61, 50, 75, 32, 85, 42, 70, 66, 80]) M = np.asarray([38, 56, 90, 63, 56, 77, 30, 80, 41, 79, 64, 88]) X = np.vstack((T, S, M))# 你會驚奇發現,這個結果和上面的結果一致,這就是參數 m, y,不知道為什么要設置這樣一個參數,hhh print(np.cov(X[0:1], X[1:]))# [[ 47.71969697 122.9469697 129.59090909] # [122.9469697 370.08333333 374.59090909] # [129.59090909 374.59090909 399. ]]
    和方差的區別
    >>> a = [1,2,3,4] # 當a是一維向量時 >>> import numpy as np >>> np.cov(a) # 計算樣本方差 array(1.66666667) >>> np.var(a) # 計算總體方差 1.25下面是 cov(a) 和 var(a)的區別 >>> 1.666666666666666667*3/4 1.25 >>>

    總結

    以上是生活随笔為你收集整理的【Numpy学习记录】np.cov详解的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。