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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2024/1/23 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Numpy学习记录】np.cov详解 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

寫(xiě)在篇前

??在概率論和統(tǒng)計(jì)學(xué)中,協(xié)方差用于衡量?jī)蓚€(gè)變量的總體誤差。而方差是協(xié)方差的一種特殊情況,即當(dāng)兩個(gè)變量是相同的情況。其定義的數(shù)學(xué)形式是: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]

協(xié)方差數(shù)學(xué)形式

  • 公式

    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ˉ)?

  • 結(jié)果形式

  • 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)?????????

    協(xié)方差代碼形式

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

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

    代碼示例

    基本使用

    import numpy as np# 計(jì)算協(xié)方差的時(shí)候,一行代表一個(gè)特征 # 下面計(jì)算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每行代表一個(gè)屬性 # 每列代表一個(gè)示例,或者說(shuō)觀測(cè) print(np.cov(X))# [[ 47.71969697 122.9469697 129.59090909] # [122.9469697 370.08333333 374.59090909] # [129.59090909 374.59090909 399. ]]

    ??重點(diǎn):協(xié)方差矩陣計(jì)算的是不同維度之間的協(xié)方差,而不是不同樣本之間。拿到一個(gè)樣本矩陣,首先要明確的就是行代表什么,列代表什么。

    fweights

    ??frequency weights:一維數(shù)組,代表每個(gè)觀測(cè)要重復(fù)的次數(shù)(相當(dāng)于給觀測(cè)賦予權(quán)重)

    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])) # 和上面例子結(jié)果一樣 # [[ 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])) # 結(jié)果變了,就是因?yàn)橄喈?dāng)于在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)) # 這樣就驗(yàn)證了上面的話(huà)咯~ # [[ 45.6025641 121.55769231 128.43589744] # [121.55769231 381.42307692 389.30769231] # [128.43589744 389.30769231 415.76923077]]

    aweights

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

    注意事項(xiàng)

    參數(shù)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))# 你會(huì)驚奇發(fā)現(xiàn),這個(gè)結(jié)果和上面的結(jié)果一致,這就是參數(shù) m, y,不知道為什么要設(shè)置這樣一個(gè)參數(shù),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. ]]
    和方差的區(qū)別
    >>> a = [1,2,3,4] # 當(dāng)a是一維向量時(shí) >>> import numpy as np >>> np.cov(a) # 計(jì)算樣本方差 array(1.66666667) >>> np.var(a) # 計(jì)算總體方差 1.25下面是 cov(a) 和 var(a)的區(qū)別 >>> 1.666666666666666667*3/4 1.25 >>>

    總結(jié)

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

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。