1. 程式人生 > >【Numpy學習記錄】np.cov詳解

【Numpy學習記錄】np.cov詳解

寫在篇前

  在概率論和統計學中,協方差用於衡量兩個變數的總體誤差。而方差是協方差的一種特殊情況,即當兩個變數是相同的情況。其定義的數學形式是: C o v ( X , Y

) = E [ ( X E ( X )
) ( Y E ( Y ) ) ] =
E [ X Y ] E [ X ] E [ Y ] Cov(X,Y)=E[(X-E(X))(Y-E(Y))] =E[XY]-E[X]E[Y]

協方差數學形式

  1. 公式

    c o v ( X , Y ) = i = 1 n ( X i X ˉ ) ( Y i Y ˉ ) n 1 cov(X,Y) = \frac{\sum_{i=1}^n(X_i-\bar{X})(Y_i-\bar{Y})}{n-1}

  2. 結果形式

C = ( c o v ( 1 , 1 ) c o v ( 1 , 2 ) c o v ( 1 , 3 ) c o v ( 1 , n ) c o v ( 2 , 1 ) c o v ( 2 , 2 ) c o v ( 2 , 3 ) c o v ( 2 , n ) c o v ( 3 , 1 ) c o v ( 3 , 2 ) c o v ( 3 , 3 ) c o v ( 3 , n ) c o v ( n , 1 ) c o v ( n , 2 ) c o v ( n , 3 ) c o v ( 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}

協方差程式碼形式

函式原型: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
            
           

相關推薦

Numpy學習記錄np.cov

寫在篇前   在概率論和統計學中,協方差用於衡量兩個變數的總體誤差。而方差是協方差的一種特殊情況,即當兩個變數是相同的情況。其定義的數學形式是: C o

深度學習&分散式Parameter Server

Parameter Server 詳解 MXNet 是李沐和陳天奇等各路英雄豪傑打造的開源深度學習框架(最近不能更火了),其中最吸引我的是它的分散式訓練的特性;而提供支援其分散式訓練特性的正是當年李少帥和 Alex Smola 等人開發的 parame

Python 學習記錄 3.安裝第三方庫,numpy和matplotlib與簡單製圖

造輪子是不可能造的,就只有等別人造好了,偷個懶拿過來用這樣子才過的下去 1.Windows下使用pip安裝官方源中的第三方庫 Python的開源氛圍很好,官方提供了PyPI這樣的第三方庫索引網站,幾乎所有主流的第三方庫都會在此註冊.並且python提供了官方下

PyQt5 學習記錄004:簡單多線程筆記

elf false fix sign widgets qtextedit odin 文本 spa 在文本編輯框中每隔幾秒添加一行文本。 1 #!/usr/bin/python3 2 # -*- coding:utf-8 -*- 3 4 import sys 5

PyQt5 學習記錄005:QMainWindow 及狀態欄、菜單欄和工具欄

qt5 open file statusbar ati etc con bubuko import 1 #!/usr/bin/env python 2 3 import sys 4 from PyQt5.QtWidgets import (QApplic

PyQt5 學習記錄010:QSplitter

core spl none idt window lap cto psi eth 1 import sys 2 from PyQt5.QtWidgets import (QApplication, 3 QWi

PyQt5 學習記錄011:使用 QListWidet 建立列表

使用 QListWidet 建立列表 作者: 八月未見 部落格: https://www.cnblogs.com/jmtm/ 建立列表: list_widget = QListWidget() 插入專案: 直接新增文字: # 在末尾新增: list_widget.addItem("Item")

程式設計學習記錄遞迴轉非遞迴

想要知道怎麼遞迴轉非遞迴,就得先弄明白遞迴函式呼叫和返回的步驟(來源於網課): 呼叫 儲存呼叫資訊(引數,返回地址) 分配資料區(區域性變數) 控制轉移給被調函式的入口 返回 儲存返回資訊 釋放資料區 控制轉移到上級函式 因為遞迴滿足L

Python 學習記錄 2.試試python編輯器,匯入py檔案

這節中,我突然發現Python其實是自帶編輯器的,所以為什麼我還去下了notepad++啊…… 1.Python編輯器 由於不滿足於每次開啟Python都要重新寫一遍所有程式碼,我決定將所有程式碼儲存下來,把一些可以重複利用的部分寫成函式的形式,儲存成.py檔

D3D學習記錄DrawIndexedPrimitive函式的詳細解釋

為了便於說明,首先假設存在下列的頂點緩衝和索引緩衝    vb=    {     {-1.0, 1.0, 0.0}, index 0     { 1.0, 1.0, 0.0}, index 1     { 1.0,-1.0, 0.0}, index 2     {-1.0,

每日安全資訊谷歌Google Play APK安全防護服務採用的機器學習技術

與生態較為封閉的蘋果 iOS 相比,谷歌為 Android 使用者提供了直接通過 APK 包來安

java學習記錄5.輸入年月日,計算其為當年的第幾天

public class Compute_Year_Month_Day {public static void main(String args[]){Scanner sc = new Scanner(System.in);//輸入年份System.out.print("請輸

ios學習記錄- 通過nib檔案實現自定義表檢視單元

新增自定義表檢視單元有兩種方法:一種方法是建立單元時在程式中新增子檢視,第二種方法是從分鏡或者nib檔案中載入它們,在這裡我們簡單採用第二種方法 一般來說,ios資料列表包含了兩部分:表檢視(分組表和無格式表)和表檢視單元。每個表檢視都是UITable

ios學習記錄-如何定製UITableView的圓角單元格

     自從ios7更新以來,UITableView控制元件的邊角style由預設圓角變成了直角,更加適應UI扁平化設計的效果了。但對於某種情況來說,如果tableview寬度不是拉伸到與父檢視等寬,那麼使用直角的tableview則會顯得不好看。如下圖分組列

Android 學習記錄JsonObject解析JSON資料

public class JsonObject { private static final String TAG = "JsonObject"; private void send

學習筆記Log4j.properties

一、Log4j簡介 Log4j有三個主要的元件:Loggers(記錄器),Appenders (輸出源)和Layouts(佈局)。這裡可簡單理解為日誌類別,日誌要輸出的地方和日誌以何種形式輸出。綜合使用這三個元件可以輕鬆地記錄資訊的型別和級別,並可以在執行時控制日誌輸出

java學習記錄13.實現簡單的瀏覽器功能:獲取原始碼、儲存原始碼、獲取圖片

仿照IE瀏覽器,設計一簡單的網站訪問程式,實現如下功能: (1)具有類似IE的簡單介面,使用者能輸入URL地址,獲得輸入URL的HTML原始碼; (2)將獲得的HTML原始碼儲存到指定檔案中。D:\index.html (3)從獲得的HTML原始碼中,選擇

Python 學習記錄0.Python3的安裝及準備

0.0 寫在前面   因為 別人的緣故+某部日劇的影響+備考計算機二級 打算系統自學一遍Python3,以前對這門語言只是有初步的認識,本人一直是MATLAB黨,所謂文無第一,計算機語言其實也沒有好壞之分(?),多學一點總是沒錯的.   網上其實有

UE4學習記錄UE4網路方面的探索0-2

在上一章中,我粗略的表達了在最開始的UI介面設定上的操作,沒有用到一絲程式碼,直接藍圖敲定去實現基本的東西。 接下來回到正題,我們需要實現UI所對應的具體功能了。 第一步:整理思路 首先確定UI 的按

java學習記錄7.定義一個介面ArearInterface,其中包含一個方法,計算面積三角形、矩形、圓形的面積

* 定義一個介面ArearInterface,其中包含一個方法,計算面積 * 定義三個類:三角形、矩形、圓形,分別實現ArearInterface中的方法 * 定義一個主類,將三角形和圓形的面積顯示在螢幕上ArearInterface 介面public interface A